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

时间:2016-08-05 21:00:00

标签: javascript jquery

我在元素上有keydown事件。

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

现在我要删除它。

我尝试了unbindoff,但两项都没有。

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

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

除了'解开'还有其他方式吗?或者'关闭'实际上有效吗?

谢谢,非常感谢!!

2 个答案:

答案 0 :(得分:4)

  

.off( events [, selector ] [, handler ] ):版本已添加:1.7

     

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

     

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

所以,我建议关注jQuery版本,因为bind / unbind没有被使用得那么多。

在以下代码段中,您可以看到.off()正常工作:

$( 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>

答案 1 :(得分:2)

由于 .click()方法只是 .on (“点击”,处理程序)的简写,因此可以使用分离。关闭(“点击”):

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

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

因此,如果您有 .keydown (处理程序),则它是 .on (“ keydown ”,处理程序)的快捷方式第一个和第二个变体,以及.trigger(“keydown”)在第三个变种中。

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

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

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

内容相似:

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