[問題] jquery 問題請教

看板Ajax作者 (由夜)時間6年前 (2018/05/27 01:12), 編輯推噓0(0012)
留言12則, 3人參與, 6年前最新討論串1/1
小弟想要製作個點擊表格欄位可以直接修改的網頁 不過遇到很奇怪的問題 也是找很久才發現,如果加上 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://www.ptt.cc/bbs/Ajax/M.1527354761.A.FB5.html

05/27 01:15, 6年前 , 1F
提個外話 建議你把 live 改成 on
05/27 01:15, 1F

05/27 01:43, 6年前 , 2F
我的按鈕是後來才產生的on好像不能用?
05/27 01:43, 2F

05/27 01:46, 6年前 , 3F
html跑完後,click event繼續丟給上層的td,然後馬上再跑一
05/27 01:46, 3F

05/27 01:48, 6年前 , 4F
次td那個event又變回有輸入和按鈕的狀態
05/27 01:48, 4F

05/27 01:49, 6年前 , 5F
在html後面加上return false或event.stopPropagation()就可
05/27 01:49, 5F

05/27 01:50, 6年前 , 6F
live的原理是綁在document上,再慢慢過濾要不要執行,所以
05/27 01:50, 6F

05/27 01:51, 6年前 , 7F
會有這問題,on綁到動態產生的元素的上層可以達到一樣效果
05/27 01:51, 7F

05/27 01:52, 6年前 , 8F
$('td.fixed').on('click','a[name=td_fixedbutton]', ...
05/27 01:52, 8F

05/27 01:53, 6年前 , 9F
是說closest是不是async這用debugger跑一下就知道了吧
05/27 01:53, 9F

05/27 01:54, 6年前 , 10F
有用debugger試你就會發現剛跑完html時是有效的
05/27 01:54, 10F

05/27 01:57, 6年前 , 11F
感謝ss大跟a6大...這樣我了解了
05/27 01:57, 11F

05/27 01:58, 6年前 , 12F
我jquery是自學的...可能很多觀念不太對...見笑了
05/27 01:58, 12F
文章代碼(AID): #1R2PM9-r (Ajax)