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;
});
无论事件是通过属性还是以编程方式添加,都应该有效。
我有一个 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;
});
无论事件是通过属性还是以编程方式添加,都应该有效。