【发布时间】:2012-05-19 14:17:33
【问题描述】:
我有一些代码可以从动态构建的表中删除一个 tr 作为 jQuery 对象(每个 tr 都有一个唯一的 id:trid):
tri = $("#"+trid+"");
var newrow = '<tr id="newr"><td colspan="4" align="center"><div id="nrow"> </div></td></tr>';
tri.after(newrow);
tri.detach();
然后我使用 innerHTML 在 div 'nrow' 中放置一个表单...表单中有一个 jQuery ui datepicker,这是第一次工作。
当表单被取消时,我将列表恢复到原来的状态:
setTimeout("tri.replaceAll( $('#newr') )", 400);
这一切都很好,除了如果我尝试在此之后编辑该(或任何)行,它会杀死表单中的 jquery ui datepicker。我很难将其归结为 replaceAll 线。如果我把它拿出来并通过重新构建来替换列表,它就可以正常工作(也不是超时)。
那么是否有另一种方法可以在不使用 replaceAll 的情况下将 tr 'newr' 替换为 jquery 对象 'tri'(replaceWith 也不起作用)?
编辑:
好的,这就是我将表单从 div 移到页面其他位置的方式:
eP = $('#eP');
eP.replaceAll( $('#nrow') );
$("#editPast").show('blind','',500,'');
eP 包含隐藏的 div editPast...
然后在取消函数中我把 eP 放回去:
setTimeout(function() {eP.appendTo($('#ePreplace')); }, 500); (thanks adeneo!)
在我 tri.replaceAll 之前,尽管使用 setTimeout 它发生在...之后...
所以我想我的问题是 eP 在 #nrow 中使用后不携带 datepicker 状态,只是 html。
已修复!
将 eP.appendTo 更改为 $('#eP').appendTo 以便它从 dom 而不是原始变量中获取它。哎呀!感谢您的just detach() 评论让我重新思考这个问题!
【问题讨论】:
-
不要将字符串传递给
setTimeout -
什么 SLaks 说的,只是 detach() 第二次的表格,你已经在别处使用它了。如果你只是在元素之间切换,你可能只是隐藏/显示它们,而不是从 DOM 中删除它们。
-
Slaks,这不是我第一次听说,但如果不加引号,我不知道该怎么做。如果我把引号拿走,它不会等待 400 毫秒,它会立即执行。
-
setTimeout(function() {tri.replaceAll( $('#newr') ) }, 400); -
@K'shin,看@adeneo的评论,是
setTimeout的正确用法。你在 w3schools.com 上学过报价吗?
标签: javascript jquery jquery-ui html-table