Javascript 为什么onclick';s的处理功能未按预期工作?
我有以下一段代码:Javascript 为什么onclick';s的处理功能未按预期工作?,javascript,dom,javascript-events,Javascript,Dom,Javascript Events,我有以下一段代码: 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 (!currentDi
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');
}
}
};
var instance=this;
window.onload=函数(){
对于(变量i=0;i
此代码被传递一个div的id数组。它所做的是,在每个div处渲染一个图像,并设置它们的onclick属性
假设我有一个字符串数组:['abc','xyz']
我希望代码在
中放置一个图像,在
中放置另一个图像
单击第一个图像时,应使用参数'abc'
调用instance.doSomething函数,反之亦然
但代码并没有像预期的那样工作。它总是使用数组中的最后一个参数调用instance.doSomething
,在本例中为'xyz'
我对JS还不熟悉,但对它的内部工作原理还没有完全掌握。这里出了什么问题,我该如何解决
谢谢你的帮助。谢谢。试试:
image.onclick = (function() {
var currentD = currentDivId;
return function() {
instance.doSomething(currentD);
}
})();
希望有帮助试试:
image.onclick = (function() {
var currentD = currentDivId;
return function() {
instance.doSomething(currentD);
}
})();
希望它有帮助欢迎来到Javascript范围问题的精彩世界。现在,JS将onclick代码视为“单击此对象时,在单击发生时获取currentDivID变量中存储的值,并将其传递给doSomething函数”
您应该做的是将参数基于图像对象本身。每个DOM对象都知道它在DOM树中的位置,因此在单击它时,onclick代码应该使用DOM遍历操作来确定它在哪个div中,并动态检索它的ID。这样,您就不必担心绑定变量和作用域问题。。。只需找出哪个div包含您的图像,并在运行时获取ID。欢迎来到Javascript范围问题的精彩世界。现在,JS将onclick代码视为“单击此对象时,在单击发生时获取currentDivID变量中存储的值,并将其传递给doSomething函数”
image.onclick = function() {
instance.doSomething(this.parentNode.id);
};
您应该做的是将参数基于图像对象本身。每个DOM对象都知道它在DOM树中的位置,因此在单击它时,onclick代码应该使用DOM遍历操作来确定它在哪个div中,并动态检索它的ID。这样,您就不必担心绑定变量和作用域问题。。。只需找出哪个div包含您的映像,并在运行时获取ID即可
image.onclick = function() {
instance.doSomething(this.parentNode.id);
};
应该这样做。因为我们知道图像在我们想要获取的div中,所以只需向上移动一个dom元素并获取其id
应该这样做。因为我们知道图像在我们想要得到的div中,所以只需向上移动一个dom元素并获取其id。我认为您必须在
for
中编写I++
而不是for
循环中编写I++
而不是for
中编写++/code>,不幸的是,它不起作用。按钮不再响应。@Murat-应该可以了。您提到您是JS新手,因此可能(function(){})(
语法对您来说是新的,但请确保匹配所有括号。也许Sudhir可以解释一下为什么它会起作用……不幸的是,它不起作用。按钮不再响应。@Murat-应该可以了。您提到您是JS新手,因此可能(function(){})(
语法对您来说是新的,但请确保匹配所有括号。也许Sudhir可以添加一些解释来解释它为什么会工作……好吧,但是这种方法会不会花费一些时间,至少是日志(页面大小)时间?没有比这更容易/更快的了吗?如果不是,我如何让我的图像找出它包含在哪个div中:)解析树实际上是一个非常快速的操作。每个节点都有一个.parentNode属性,您可以跟随这些父节点返回到树的顶部。日志(页面深度)是最坏的情况。由于您将图像直接插入到div中,您可能只需要转到img.parentNode就可以得到图像所在的div,所以O(1)。好的,但是这种方法不会花费一点时间,至少需要记录(页面大小)时间吗?没有比这更容易/更快的了吗?如果不是,我如何让我的图像找出它包含在哪个div中:)解析树实际上是一个非常快速的操作。每个节点都有一个.parentNode属性,您可以跟随这些父节点返回到树的顶部。日志(页面深度)是最坏的情况。由于您将图像直接插入到div中,您可能只需要转到img.parentNode就可以得到图像所在的div,所以O(1)。