作者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/cn.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