JQuery在循環中綁定事件的問題詳解
有個頁面上需要N個DOM,每個DOM里面的元素ID都要以數字結尾,比如說
1
2
3
|
<input type=
"text"
name=
"username"
id=
"username_1"
value=
""
/>
<input type=
"text"
name=
"username"
id=
"username_2"
value=
""
/>
<input type=
"text"
name=
"username"
id=
"username_3"
value=
""
/>
|
現在有個循環,在頁面載入的時候需要給這每個元素增加一個onclick事件,很容易想到的寫法就是
1
2
3
4
5
6
7
|
$(
function
(){
for
(
var
i=1; i<=3; i++){
$(
'#username_'
+i).onclick(
function
(){
alert(i);
});
}
});
|
這么寫是錯誤的。。。
錯誤的原因以及類似的錯誤分析詳見這篇文章《深入理解JQuery循環綁定事件》
然后改成下面的就對了
1
2
3
4
5
6
7
8
9
10
|
$(
function
(){
for
(
var
i=1; i<=3; i++){
$(
"#username_"
+i).bind(
"click"
, {index: i}, clickHandler);
}
function
clickHandler(event) {
var
i= event.data.index;
alert(i);
}
});
|
舉例:
$(function(){
for(var n=1;n<menulist.length;n++){
$(".rm-container #level"+menulist[n].id+" a").bind("click", {index: menulist[n].name}, clickHandler);
}
function clickHandler(event) {
var i= event.data.index;
alert(i);//輸出a標簽的名字
return false;//點擊a之后,控制頁面不跳轉
}
});