如何取消元素的失去焦点事件绑定

4

一个奇怪的问题。

脚本在'mousedown'事件上执行某些操作,然后在'keypress'、'focusout'、'keyup'事件中执行。

问题是,一旦其中之一被执行,如何终止另外两个事件。

我尝试过$(document).off()$(this).off('focusout'),但都不起作用。

有什么线索吗?

.on('mousedown', '.task-content', function() {
    // Make DIV Editable
})

.on('keypress', '.task-content', function (e) {
    if (e.which == 13 && !e.shiftKey) {
        // Update DIV content to DB
    }
})

.on('focusout', '.task-content', function() {
    // Update DIV content to DB
})

.on('keyup', '.task-content', function (e) {
    if (e.which == 27) {
    // Return DIV to previous state
  }
})

1
我不明白你想做什么。你能展示一下你尝试取消/解绑事件的实际代码吗? - Evan Davis
@Mathletics / 我稍微编辑了一下代码(那些都正常 - 发布会是一段很长的代码)。具体发生的事情是,一旦我按下“Enter”键(keypress、13),// focusout 仍在“侦听”,也可以执行。看到我想要其中一个被使用时杀死另外两个进程。 - October Eleven
我猜他只想执行其中的1个处理程序,解除绑定是不必要的。 - Balint Bako
1个回答

1
你的代码运行良好,可能是选择器写错了。
$('.task-content').on('keypress', function (e) {
    if (e.which == 13 && !e.shiftKey) {
        // Update DIV content to DB
        alert("key press");
        $(this).off('focusout');
    }
})

$('.task-content').on('focusout', function () {
    // Update DIV content to DB
    alert("focus out ");
})

检查这个JSFiddle

谢谢。我刚刚成功做到了,但是我需要再次在“mousedown”上“重用”focusout。换句话说,它不能被永久杀死。 - October Eleven
@October 使用委托将重新绑定它。 - Praveen
委托不是被.on()取代了吗? - October Eleven
@OctoberEleven 感谢您纠正我的错误,您可以使用 .on()。 - Praveen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接