1

伙计们,我有一个小问题,对我来说很大,所以我不得不问你...无论如何问题是,我想从一个表中复制表行并将其添加到另一个表中,但在我将其添加到另一个表之前表我需要删除它的所有事件,我使用了谷歌分配但它没有帮助我

var $UserRow = $(Final).closest('tr');

$('td', $UserRow).each(function () {
    $(this).onclick = null;
});

$UserRow.clone().appendTo($('#UserTicket'));

这是到目前为止的代码,我得到了 UserRow 和它里面的所有 'td' 只是如何删除它的所有事件?

4

4 回答 4

2

您只需要先克隆,然后附加到容器。.clone默认情况下不复制事件处理程序。

var $UserRow = $(Final).closest('tr').clone();
$UserRow.appendTo('#UserTicket');

jQuery.clone()

.clone( [withDataAndEvents] [, deepWithDataAndEvents] )

withDataAndEvents一个布尔值,指示是否应将事件处理程序和数据与元素一起复制。默认值为 false。在 jQuery 1.5.0 中,默认值是不正确的;它在 1.5.1 及更高版本中改回 false 。

于 2012-10-03T01:59:42.610 回答
1

由于它们不是 jQuery 事件系统的一部分,因此没有理由创建 jQuery 对象。

您需要清除本机 DOM 元素:

$('td', $UserRow).each(function () {
    this.onclick = null;
});

由于您使用了事件属性,我不确定是否会重新创建处理程序,因此您可能也想清除它。

$('td', $UserRow).each(function () {
    this.onclick = null;
    this.removeAttribute("onclick");
});
于 2012-10-03T02:29:39.333 回答
0

尝试使用 DOM 和cloneNode; 您会注意到事件处理程序不会被复制。例如:

// get the first table row in the document.
var firstRow = document.getElementsByTagName('tr')[0];

// give it an event handler to test.
firstRow.onclick = function() { alert('It works'); };

// clone the row and append it to the end of the row set.
firstRow.parentNode.appendChild(firstRow.cloneNode(true));  

你可以在这里测试它;您会看到它克隆了第一行并将其附加到表的末尾,并且该行不再可单击。

于 2012-10-03T03:03:10.477 回答
0

使用 jQuery .off

$(element).off('click');

使用上述内容删除所有点击处理程序。要仅删除特定的单击处理程序,请执行

$(element).off('click', functionNotToBeExecuted);
于 2012-10-03T01:58:37.927 回答