Eri*_*ric 2 javascript onclick javascript-events
我非常擅长用Javascript编写,我正在创建一个基本的标签导航界面作为原型/练习.现在,我正在尝试使用onclick事件处理程序在无序的链接列表上显示警报,就像测试一样,无法弄明白.每次加载页面时,都会发生所有5次onclick事件,而不会点击任何内容.看看代码,如果您有任何建议,请告诉我:
window.onload = initAll;
var xhr = false;
function initAll () {
var navDiv = document.getElementById("tab_navigation");
var navTabs = navDiv.getElementsByTagName("a");
for (var i = 0; i < navTabs.length; i++) {
navTabs[i].onclick = tellTab(i);
}
}
function tellTab (number) {
number = number + 1;
alert("You clicked tab number " + number);
}
Run Code Online (Sandbox Code Playgroud)
HTML结构如下:
<div id="tab_navigation">
<ul>
<li><a href="#1">Tab 1</a></li>
<li><a href="#2">Tab 2</a></li>
<li><a href="#3">Tab 3</a></li>
<li><a href="#4">Tab 4</a></li>
<li><a href="#5">Tab 5</a></li>
</ul>
</div>
Run Code Online (Sandbox Code Playgroud)
在一个for循环中,你有这一行:
navTabs[i].onclick = tellTab(i);
Run Code Online (Sandbox Code Playgroud)
那tellTab立即打电话.你可以做的是tellTab返回一个闭包,如下所示:
function tellTab (number) {
return function() {
// I commented out the following line
// because I don't think it's necessary.
//number = number + 1;
alert("You clicked tab number " + number);
};
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是在for循环内创建一个闭包:
for (var i = 0; i < navTabs.length; i++) {
(function(i) {
navTabs[i].onclick = function() {
tellTab(i);
};
})(i);
}
Run Code Online (Sandbox Code Playgroud)