我在元素上有keydown事件。
$("#element").keydown(function() {
// do stuff!
});
现在我要删除它。
我尝试了unbind
和off
,但两项都没有。
$("#element").unbind("click");
$("#element").off("click");
如果使用.on("click", function...)
或.bind("click", function...)
,是否需要.click
或unbind
代替off
。如果是这样,这不是我的代码,我不允许修改它,所以我需要另一种方法。
除了'解开'还有其他方式吗?或者'关闭'实际上有效吗?
谢谢,非常感谢!!
答案 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");
});