js .off() 不适用于 <tr> 元素

js .off() is not working on <tr> elements

我有一个 table 和 <tr> 有 ew <input> 元素和 onchange 事件在设计时声明但从数据库动态填充。 <td > 的 HTML 看起来像这样:-

<td scope="col" style="width: 60px; font-weight: normal;">
  <input type="text" id="hall_name" name="hall_name" class="form-control" onchange="rowEdited($(this).parent())" value=<%=hallName %> ></input>
</td>
<td scope="col" style="width: 50px; font-weight: normal; text-align: center">
  <input type="text" style="text-align: center" id="hall_capacity" name="hall_capacity" onchange="rowEdited($(this).parent())" class="form-control" value=<%=hallCapacity %>></input>
</td>
<td scope="col" style="width: 75px; font-weight: normal; text-align: center">
  <input type="text" id="hall_location" name="hall_location" onchange="rowEdited($(this).parent())" class="form-control" value=<%=hallLocation%>></input>
</td>

克隆最后一个 <tr> 后,我试图从最后一个 <tr> 中的所有输入中删除 onchange 事件,但它不起作用。

克隆最后一个 <tr> 的 js 代码如下所示:-

var row = $('#hallTable tr:last');
var new_row =  $(row).clone(false,false).off();

我目前尝试的Javascript代码是这样的

$('#hallTable tr:last').find("*").off();

$('#hallTable tr:last').find(':input').each(function(){
    $(this).unbind('onchange', rowEdited);
})

$('#hallTable tr:last').find('input:checkbox').each(function(){
    $(this).unbind('onchange', rowEdited);

    $('#hallTable tr:last').find('input').onchange = null;

$('#hallTable tr:last').find('input').unbind('onchange', 'rowEdited');

但是 none 正在工作。请指教

jQuery .off()unbind 函数仅删除使用 jQuery 添加的事件侦听器。他们不会删除内联事件监听器(比如 onchange="rowEdited($(this).parent())")。

要删除与 $('#hallTable tr:last').find('input') 匹配的所有元素的内联事件监听器 onchange,您需要编写:

$('#hallTable tr:last').find('input').each(function() {
  this.onchange = null;
})

一般来说,您根本不应该使用内联事件。要么使用 addEventListener or if you want to use jQuery then use .on().

由于事件处理代码是通过 onclick 属性附加的,您应该删除这些属性:

$('#hallTable tr:last input').removeAttr('onclick');

请注意,这样您就不必循环。

这对我有用。请尝试。

$('#hallTable tr:last').find('input').each(function (id, item) {
        item.onchange = null;
});

无论事件是通过属性还是以编程方式添加,都应该有效。