为什么onclick'的处理函数不像预期的那样工作
Why does onclick's handling function not work as expected?
我有以下一小段代码:
var instance = this;
window.onload = function () {
for (var i = 0; i < array.length; ++i) {
var currentDivId= array[i];
var currentDiv = document.getElementById(currentDivId);
try {
if (!currentDiv) {
throw 'Div id not found: ' + currentDivId;
}
var image = document.createElement('img');
image.src = 'img.jpg';
image.onclick = function() {
instance.doSomething(currentDivId);
};
currentDiv.appendChild(image);
}
catch(e) {
console.warn('oops');
}
}
};
传递给这段代码的是一个div的id数组。它所做的是,它在每个div上渲染一个图像并设置它们的onclick
属性。
假设我有一个字符串数组:['abc', 'xyz']
我希望代码将一个图像放在<div id="abc"></div>
内,另一个图像放在<div id="xyz"></div>
内。
当您点击第一张图片时,instance.doSomething
函数应该调用参数'abc'
,反之亦然。
但是代码没有像预期的那样工作。它总是使用数组中的最后一个参数调用instance.doSomething
,在本例中是'xyz'
。
我是JS的新手,对它的内部工作原理还没有一个扎实的掌握。这里出了什么问题,我该如何解决?
感谢您的帮助。
image.onclick = function() {
instance.doSomething(this.parentNode.id);
};
应该可以了。因为我们知道图像位于我们想要获取的div中,所以只需向上移动一个dom元素并获取它的id。
欢迎来到Javascript作用域问题的奇妙世界。就像现在一样,JS正在处理你的onclick代码,就像"当这个对象被点击时,获取存储在currentDivID变量中的值在点击发生的时候,并将其传递给doSomething函数"。
你应该做的是基于图像对象本身的参数。每个DOM对象都知道它在DOM树中的位置,因此在单击它时,onclick代码应该使用DOM遍历操作来找出它在哪个div中,并动态检索它的ID。这样你就不必担心绑定变量和作用域问题……只需找出包含图像的div并在运行时获取ID。
尝试:
image.onclick = (function() {
var currentD = currentDivId;
return function() {
instance.doSomething(currentD);
}
})();
希望有所帮助
相关文章:
- Javascript在处理函数时防止单击
- 如何构建'瞬间'在非全局区域设置中工作的函数
- 构造函数中的事件处理程序与构造函数外的事件处理函数的行为不同
- 如何异步处理:函数C取决于函数B取决于函数A
- 在服务器上创建一个复选框,使用 javascript 处理函数
- 处理函数中的异步调用(Firebase)
- 筛选器无法处理函数返回的值
- 工作数据库函数没有'使用ajax时无法工作
- 我如何让原型在 JavaScript 中工作构造函数
- 事件处理函数不适用于“this”关键字
- 将信息传递到 jQuery ajax 响应处理函数中
- Javascript 如何处理函数参数
- JS如何处理函数参数
- node.js async.maplimit() 将额外的参数传递给处理函数
- 如何按顺序处理函数,而不是一次全部处理
- 我的代码在没有警报()的情况下无法正常工作;启动函数
- 如何在Google Apps Script中添加工作表函数
- 为什么onclick'的处理函数不像预期的那样工作
- onKeyDown处理函数只工作一次
- 函数处理函数是如何在JQuery中工作的