作者zzpop (給我極品其餘免談)
看板Ajax
標題[問題] jquery兩段程式碼的差別
時間Sat Jun 30 23:35:43 2012
各位大大晚安
最近發現一個很奇怪的問題
幾乎相同的兩段程式碼
( 把不能跑的其中一段拉出來獨立成 function )
一個能跑一個卻會出現錯誤
不知道自己想法與邏輯上是哪裡出了問題?
懇請各位大大指導一下我的觀念
非常非常感謝!!! T_T
程式碼如下:
會有錯誤的:
for(var i=0; i<thnum; i++){
$("th:eq("+i+")").bind("click",function(){
for(var j=1; j<trnum; j++){
$("table tr:eq("+j+") td:eq("+i+")").text(c[i][j-1]);
$("span").append(c[i][j-1]+",");
}
c[i].reverse();
}); 把綠色這段拉出來變成function
}
改成這樣卻沒有錯誤了
for(var i=0; i<thnum; i++){
aa(i);
}
function aa(i){
$("th:eq("+i+")").bind("click",function(){
for(var j=1; j<trnum; j++){
$("table tr:eq("+j+") td:eq("+i+")").text(c[i][j-1]);
$("span").append(c[i][j-1]+",");
}
c[i].reverse();
});
}
非常感謝各位大大了...T_T
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.127.180.41
※ 編輯: zzpop 來自: 59.127.180.41 (06/30 23:37)
※ 編輯: zzpop 來自: 59.127.180.41 (06/30 23:37)
1F:推 s25g5d4:為什麼不用each 06/30 23:37
2F:推 s25g5d4:我知道問題在哪 可是我不太會講...第一段code中的i並不會 06/30 23:41
3F:推 ChowMein:i不對,用個方式保留狀態吧 06/30 23:41
4F:→ s25g5d4:每次都反應到bind第二個參數的暱名function內 06/30 23:42
5F:→ ChowMein:第二個因為closure, 所以找得到i 06/30 23:42
6F:→ s25g5d4:要馬執行時就是找不到i 不然就是每次都抓到for迴圈跑到最 06/30 23:42
7F:→ s25g5d4:後一次時i的值 06/30 23:42
8F:→ zzpop:喔喔喔我再試試看,不用each是因為要一格對應到一格 06/30 23:43
9F:→ s25g5d4:嗯 ChowMein講的太棒了 我還是去旁邊蹲吧... 06/30 23:43
10F:→ zzpop:用陣列的方式先記錄每一格的內容,在依序填入 06/30 23:43
11F:→ s25g5d4:老實說我覺得你用each搞不好還不會發生這個問題.. 06/30 23:44
12F:→ zzpop:謝謝大大指導觀念,我在研究看看,大感恩 T_T 06/30 23:44
13F:推 mrbigmouth:這種情況我比較喜歡不個別綁定 07/01 08:13
14F:→ mrbigmouth:而是直接榜$("th").bind('click') 07/01 08:13
15F:→ mrbigmouth:先快取$("th") fn裡再用$th.index(this)去抓位置 07/01 08:14
16F:→ legnaleurc:用 each 你還是可以知道目前的 index 07/02 06:12