我有一个带有<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>后,我试图从最后一个onchange中的所有输入中删除<tr>事件,但是它不起作用。

克隆最后一个<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');


但是没有一个工作。请指教。

最佳答案

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

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

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


通常,您根本不应该使用内联事件。使用addEventListener,或者如果要使用jQuery,请使用.on()

关于javascript - js .off()在<tr>元素上不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48973194/

10-11 23:25
查看更多