我从未使用过addEventListener(),但由于我生成内容的方式,我无法为每个<div>我将其视为按钮的 HTML 等效项编写。相当于:
<div onmousedown="jsItems[someId].toggleImage(someGallery, someIndex);"></div>
我一直在尝试的是:
JsTree.prototype.addGalleries = function(inElements) {
// ...unrelated code here removed for StackOverflow...
for (var i = 0; i < this.jsGalleries.length; i++) {
for (var j = 0; j < this.jsGalleries[i].buttons.length; j++) {
var self = this;
this.jsGalleries[i].buttons[j].addEventListener("mousedown", function() {
self.toggleImage(i, j);
});
}
}
}
其中i从 0 到 1j计数和从 0 到 2 计数(i在这种情况下都是),i表示someGallery,j表示someIndex,我可以在上面的代码内部(或使用someIdinside的函数)访问。this.idself.idaddEventListener
问题是,尽管单击这些“按钮”(<div>s )之一确实会触发:
JsTree.prototype.toggleImage = function(inGallery, inIndex) {
alert(this.id+", "+inGallery+", "+inIndex);
}
无论单击哪个按钮,它都会始终提示“8、2、3”。“8”是正确的,但我不知道为什么会提醒“2”或“3”。它们似乎比什么多 1i并且j计数(通过尝试j < this.jsGalleries[i].buttons.length-1哪个警报“8、2、2”来验证)。
编辑: someId,someGallery和someIndex不是真正的变量,它们是我为了解释问题而编造的垃圾。