从jquery元素中删除keydown事件不起作用

Remove keydown event from jquery element not working

本文关键字:keydown 事件 不起作用 删除 jquery 元素      更新时间:2023-09-26

我在元素上有keydown事件。

$("#element").keydown(function() {
     // do stuff!
});

现在我想删除它。

我试过unbindoff,但都不起作用。

$("#element").unbind("click");
$("#element").off("click");

如果使用unbindoff,我是否需要执行.on("click", function...).bind("click", function...)而不是.click。如果是这样,这不是我的代码,也不允许我修改它,所以我需要一种替代方法。

除了"取消绑定"或"关闭"之外,还有其他有效的方法吗?

谢谢,非常感谢您的帮助!!

.off(事件[,选择器][,处理程序](:添加的版本:1.7

.unbind(eventType[,handler](:添加的版本:1.0

.on((方法将事件处理程序附加到jQuery对象中当前选定的元素集。从jQuery1.7开始,.on((方法提供了附加事件处理程序所需的所有功能。有关从旧的jQuery事件方法转换的帮助,请参阅.bind((、.delete((和.live((。要删除与.on((绑定的事件,请参阅.of((。若要附加只运行一次的事件,然后再删除它自己,请参阅.one((

因此,我建议注意jQuery版本,因为bind/ubind的使用不多。

在下面的代码段中,您可以看到.of((运行良好:

$( window ).load(function() {
  $("#element").keydown(function(e) {
    console.log('keydown event');
  });
  $("#elementOff").click(function() {
    // unbind keydown
    $("#element").off('keydown');
    
    // attach click
    $("#element").off('click').click(function(e) {
      console.log('click event');
    });
  });
});
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<form>
  <input id="element" type="text">
</form>
<button id="elementOff">Unbind Keydown and attach Click</button>

由于.click((方法只是.在(">click",处理程序(上的缩写,因此可以使用进行分离关闭(">点击"(:

$("#element").off("click", function(){
    $("#element").hide(); //not working
});
$("#element2").on("click", function() {
    $("#element2").hide(); //working
});

因此,如果您有一个.keydown(处理程序(,它是第一个和第二个变体中的.oneydown,处理程序(的快捷方式,第三个变体中为.trigger("keydown"(。

提供的参数必须匹配才能删除事件处理程序。

如果你不想接触现有的脚本,或者它可能会被更改,我建议你只需在html页面中包含一个外部.js脚本即可解除事件绑定:

<script src="your_external_script.js"></script>

具有类似内容:

$(document).ready(function(){
    $("#element2").unbind("click");
});