[問題] jquery兩段程式碼的差別

看板Ajax作者 (給我極品其餘免談)時間14年前 (2012/06/30 23:35), 編輯推噓4(4012)
留言16則, 5人參與, 最新討論串1/1
各位大大晚安 最近發現一個很奇怪的問題 幾乎相同的兩段程式碼 ( 把不能跑的其中一段拉出來獨立成 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)

06/30 23:37, , 1F
為什麼不用each
06/30 23:37, 1F

06/30 23:41, , 2F
我知道問題在哪 可是我不太會講...第一段code中的i並不會
06/30 23:41, 2F

06/30 23:41, , 3F
i不對,用個方式保留狀態吧
06/30 23:41, 3F

06/30 23:42, , 4F
每次都反應到bind第二個參數的暱名function內
06/30 23:42, 4F

06/30 23:42, , 5F
第二個因為closure, 所以找得到i
06/30 23:42, 5F

06/30 23:42, , 6F
要馬執行時就是找不到i 不然就是每次都抓到for迴圈跑到最
06/30 23:42, 6F

06/30 23:42, , 7F
後一次時i的值
06/30 23:42, 7F

06/30 23:43, , 8F
喔喔喔我再試試看,不用each是因為要一格對應到一格
06/30 23:43, 8F

06/30 23:43, , 9F
嗯 ChowMein講的太棒了 我還是去旁邊蹲吧...
06/30 23:43, 9F

06/30 23:43, , 10F
用陣列的方式先記錄每一格的內容,在依序填入
06/30 23:43, 10F

06/30 23:44, , 11F
老實說我覺得你用each搞不好還不會發生這個問題..
06/30 23:44, 11F

06/30 23:44, , 12F
謝謝大大指導觀念,我在研究看看,大感恩 T_T
06/30 23:44, 12F

07/01 08:13, , 13F
這種情況我比較喜歡不個別綁定
07/01 08:13, 13F

07/01 08:13, , 14F
而是直接榜$("th").bind('click')
07/01 08:13, 14F

07/01 08:14, , 15F
先快取$("th") fn裡再用$th.index(this)去抓位置
07/01 08:14, 15F

07/02 06:12, , 16F
用 each 你還是可以知道目前的 index
07/02 06:12, 16F
文章代碼(AID): #1FxnpID0 (Ajax)
文章代碼(AID): #1FxnpID0 (Ajax)