作者guardlan (由夜)
看板Ajax
標題[問題] jquery 問題請教
時間Sun May 27 01:12:37 2018
小弟想要製作個點擊表格欄位可以直接修改的網頁
不過遇到很奇怪的問題
也是找很久才發現,如果加上 setTimeout 就正常了 (時間給0...)
這是代表 closest 是異步執行的嗎!?
closest還沒回來 下一行已經在跑了?
總覺得我應該是哪裡理解錯誤...
jquery 代碼如下
$('td.fixed').live('click', function() {
if (!$(this).find('input').length) {
$(this).html('<input type="text" value="' + $(this).text() + '"><a
name="td_fixedbutton" class="button">儲存</a>');
}
});
$('a[name=td_fixedbutton]').live('click', function() {
let x = $(this).closest('td');
setTimeout(function() { //←這個加上去功能就會正常,拿掉就異常
x.html(x.find('input').val());
}, 0);
});
雖然現在可以執行,但是我覺得 setTimeout 應該不是正常解法...
希望可以解惑謝謝
我在 jsfiddle 放了遇到問題的程式碼
https://jsfiddle.net/76mr4fff/
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.161.59.193
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Ajax/M.1527354761.A.FB5.html
1F:→ a65162: 提個外話 建議你把 live 改成 on 05/27 01:15
2F:→ guardlan: 我的按鈕是後來才產生的on好像不能用? 05/27 01:43
3F:→ ssccg: html跑完後,click event繼續丟給上層的td,然後馬上再跑一 05/27 01:46
4F:→ ssccg: 次td那個event又變回有輸入和按鈕的狀態 05/27 01:48
5F:→ ssccg: 在html後面加上return false或event.stopPropagation()就可 05/27 01:49
6F:→ ssccg: live的原理是綁在document上,再慢慢過濾要不要執行,所以 05/27 01:50
7F:→ ssccg: 會有這問題,on綁到動態產生的元素的上層可以達到一樣效果 05/27 01:51
8F:→ ssccg: $('td.fixed').on('click','a[name=td_fixedbutton]', ... 05/27 01:52
9F:→ ssccg: 是說closest是不是async這用debugger跑一下就知道了吧 05/27 01:53
10F:→ ssccg: 有用debugger試你就會發現剛跑完html時是有效的 05/27 01:54
11F:→ guardlan: 感謝ss大跟a6大...這樣我了解了 05/27 01:57
12F:→ guardlan: 我jquery是自學的...可能很多觀念不太對...見笑了 05/27 01:58