jQuery .off(“ click”)事件不起作用

时间:2018-07-13 08:36:13

标签: javascript jquery

这使我烦恼了几个小时,但仍然感到困惑,因为它为什么不起作用...当我使用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>&nbsp&nbsp
    <label class="generate multi">Generate Multi</label>
  </td>
</tr>
</table>

3 个答案:

答案 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>&nbsp&nbsp
      <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)

您将事件添加到所有行中,然后该函数将事件删除到所单击的行中