Get clicked element onclick
本问题已经有最佳答案,请猛点这里访问。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | var submenus = document.getElementsByClassName("submenu"); for (var i = 0; i < submenus.length; i++) { submenus[i].onclick = function() { toggle(submenus[i].nextSibling); return false; } } function toggle(el) { if (el.style.display == 'block') { el.style.display = 'none'; } else { el.style.display = 'block'; } } |
导致错误:
我假设
1 2 3 4 5 6 7 | var submenus = document.getElementsByClassName("submenu"); for (var i = 0; i < submenus.length; i++) { submenus[i].onclick = function() { toggle( this.nextSibling); return false; } } |
在这样的事件处理程序中,
有关更多信息,请参阅提供的链接@FelixKling:http://quirksmode.org/js/this.html
1 2 3 4 5 6 7 8 9 10 | var submenus = document.getElementsByClassName("submenu"); for (var i = 0; i < submenus.length; i++) { submenus[i].onclick = (function(j) { return function () { // alert(j); toggle(submenus[j].nextSibling); return false; }; })(i); } |
因为
在所需元素上,
1 2 3 4 5 6 | Hello Hello Hello Hello Hello Hello |
并使用您的代码:
1 2 3 4 5 6 | var submenus = document.getElementsByClassName("submenu"); for (var i = 0; i < submenus.length; i++) { submenus[i].onclick = function() { alert(i); } } |
你会在每个元素上获得
你必须在
1 2 3 4 5 6 7 | for (var i = 0; i < submenus.length; i++) { submenus[i].onclick = (function(j) { return function () { alert(j); }; })(i); } |
如你所见,我已经创建了一个函数并立即执行它(使用一个名为
它的回归,是另一个功能。
检查这个jsFiddle。
它必须如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | var submenus = document.getElementsByClassName("submenu"); for (var i = 0; i < submenus.length; i++) { (function(i){ submenus[i].onclick = function() { toggle(submenus[i].nextSibling); return false; }; })(i); } function toggle(el) { if (el.style.display == 'block') { el.style.display = 'none'; } else { el.style.display = 'block'; } } |
你可以这样做 :
1 2 3 4 5 6 7 8 9 | var submenus = document.getElementsByClassName("submenu"); for (var i = 0; i < submenus.length; i++) { (function(e){ submenus[i].onclick = function() { toggle(e); return false; } })(submenus[i].nextSibling); } |
立即调用的函数创建一个保留