这使我烦恼了几个小时,但仍然感到困惑,因为它为什么不起作用...当我使用table.off("click");
时,它可以起作用,但也将取消第一个没有id =多...
var table = $("table#datatable")
var button = $(".generate")
function turnOffClick() {
console.log("button clicked")
var multiButton = $("label#multi")
multiButton.off("click");
}
table.on("click", button, turnOffClick)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="datatable">
<tr>
<td>
<label class="generate">Generate</label>  
<label class="generate multi">Generate Multi</label>
</td>
</tr>
</table>
答案 0 :(得分:4)
如果要在第一次单击后分离事件,则可以使用jQuery one()
。
var table = $("table#datatable")
function turnOffClick() {
console.log("button clicked");
}
table.on("click", ".generate:not(.multi)", turnOffClick);
table.one("click", "label.multi", turnOffClick);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="datatable">
<tr>
<td>
<label class="generate">Generate</label>  
<label class="generate multi">Generate Multi</label>
</td>
</tr>
</table>
答案 1 :(得分:0)
您正在从表中获取事件,但正在从标签中删除事件。
$( "table#datatable td label" ).bind( "click", function() {
console.log( "Sample" );
var multiButton = $("label#multi");
console.log(multiButton);
$( "label#multi").off( "click" );
});
});
答案 2 :(得分:0)
该事件不在table#datatable
中,而在label#multi
中
尝试以下解决方案:
var table = $("#datatable td")
var button = $(".generate")
function turnOffClick() {
console.log("button clicked")
var multiButton = $(this)
multiButton.off("click");
}
table.on("click", button, turnOffClick)
您将事件添加到所有行中,然后该函数将事件删除到所单击的行中