在 onerror 属性中使用闭包似乎不起作用
Using closures in onerror attribute does not seem to work
我在一个相当大的 JS 文件中有这段代码。
function accError() {
console.log("hello there");
}
var setAccount = function(key) {
var error = function() {
accError();
};
document.body.innerHTML += "<img src='//www.somerandomdomain.in/i.jpg?key=" + key + "' onerror='error();' />"
};
setAccount("a");
如果图像加载失败,我想调用 error
函数。但它给了我一个错误 - error
未定义 。
这里的 JSFiddle = http://jsfiddle.net/rrvvw1sj/
在图像或任何其他元素的加载或错误回调的情况下,范围界定是如何工作的? error()
函数不应该使用闭包访问吗?
'onerror=' 未在闭包范围内求值,因此将无法访问 error()。
如果它被评估,那么当然会立即调用 error()。
要么将函数外的定义移动到全局范围内,要么给图像一个 id 并使用 addEventListener 或等效方法将函数附加到 onerror。
您的 img 标签找不到错误函数的原因是它无法访问闭包的范围。
document.body.innerHTML += "<img src='//www.somerandomdomain.in/i.jpg?key=" + key + "' onerror='error();' />"
这行代码没有向文档发送任何东西,可以link返回闭包。
它发送的是一个字符串。
然后在文档范围内解析该字符串。
由于您的错误函数在全局范围内不存在,因此不会找到它。
您需要做的是在闭包中创建一个对象并将错误函数附加到它。然后,如果您将该对象发送到文档,它将保持与闭包内错误函数的连接。您可以通过使用 DOM(Document Object Model) methods to create an img element node and then append that object to the body.
Then you have a reference in the closure to the element and can use addEventListener 将错误函数附加到错误事件
//document.body.innerHTML += "<img src='//www.somerandomdomain.in/i.jpg?key=" + key + "' onerror='error();' />"
var img=document.createElement("img");
img.setAttribute('src', '//www.somerandomdomain.in/i.jpg?key=' + key);
img.addEventListener("error", error);
document.body.appendChild(img);
我在一个相当大的 JS 文件中有这段代码。
function accError() {
console.log("hello there");
}
var setAccount = function(key) {
var error = function() {
accError();
};
document.body.innerHTML += "<img src='//www.somerandomdomain.in/i.jpg?key=" + key + "' onerror='error();' />"
};
setAccount("a");
如果图像加载失败,我想调用 error
函数。但它给了我一个错误 - error
未定义 。
这里的 JSFiddle = http://jsfiddle.net/rrvvw1sj/
在图像或任何其他元素的加载或错误回调的情况下,范围界定是如何工作的? error()
函数不应该使用闭包访问吗?
'onerror=' 未在闭包范围内求值,因此将无法访问 error()。
如果它被评估,那么当然会立即调用 error()。
要么将函数外的定义移动到全局范围内,要么给图像一个 id 并使用 addEventListener 或等效方法将函数附加到 onerror。
您的 img 标签找不到错误函数的原因是它无法访问闭包的范围。
document.body.innerHTML += "<img src='//www.somerandomdomain.in/i.jpg?key=" + key + "' onerror='error();' />"
这行代码没有向文档发送任何东西,可以link返回闭包。
它发送的是一个字符串。
然后在文档范围内解析该字符串。
由于您的错误函数在全局范围内不存在,因此不会找到它。
您需要做的是在闭包中创建一个对象并将错误函数附加到它。然后,如果您将该对象发送到文档,它将保持与闭包内错误函数的连接。您可以通过使用 DOM(Document Object Model) methods to create an img element node and then append that object to the body.
Then you have a reference in the closure to the element and can use addEventListener 将错误函数附加到错误事件
//document.body.innerHTML += "<img src='//www.somerandomdomain.in/i.jpg?key=" + key + "' onerror='error();' />"
var img=document.createElement("img");
img.setAttribute('src', '//www.somerandomdomain.in/i.jpg?key=' + key);
img.addEventListener("error", error);
document.body.appendChild(img);