Javascript 文本输入为空时的临时禁用键控事件

Javascript 文本输入为空时的临时禁用键控事件,javascript,jquery,Javascript,Jquery,我是jquery的初学者,但我已经尽了最大的努力,但不幸的是我错过了一些东西 当文本输入为空时,如何临时禁用keyup事件,并在键入内容后再次启用它 我不能在按键中捕捉退格,所以我使用了keyup。这是我的密码 $('#searchBox').keyup(function(e){ if(e.keyCode != '18' && e.keyCode != '91' && e.keyCode != '17' && e.keyCode != '16' &

我是jquery的初学者,但我已经尽了最大的努力,但不幸的是我错过了一些东西

当文本输入为空时,如何临时禁用keyup事件,并在键入内容后再次启用它

我不能在按键中捕捉退格,所以我使用了keyup。这是我的密码

$('#searchBox').keyup(function(e){
if(e.keyCode != '18' && e.keyCode != '91' && e.keyCode != '17' && e.keyCode != '16' && e.keyCode != '20' && e.keyCode != '27' && e.keyCode != '113' && e.keyCode != '115' && e.keyCode != '118' && e.keyCode != '119' && e.keyCode != '120' && e.keyCode != '122' && e.keyCode != '123' && e.keyCode != '44' && e.keyCode != '19' && e.keyCode != '45' && e.keyCode != '46' && e.keyCode != '36' && e.keyCode != '33' && e.keyCode != '34' && e.keyCode != '35' && e.keyCode != '39' && e.keyCode != '37' && e.keyCode != '38' && e.keyCode != '9'){
    if(e.keyCode == '8' && $(this).val()==""){
        //what will i put here
    }else if(e.keyCode == '8' && $(this).val()!=""){
        refreshWookmark($(this).val());
    }else{
        refreshWookmark($(this).val());
    }
}
});

您可以在空白输入时
返回

$("#idOfElement").keyup(function() {
    if (!this.value == '') {
        //do stuff
    } else {
        return;
    }
});

<>而不是禁用它,只需检查输入是否存在,并且<代码>键代码< /代码>是您认为有效的:

$('#searchBox').on('keyup',function(e){
    var bad = ['18','91','17','16','20','27','113','115','118','119','120','122','123','44','19','45','46','36','33','34','35','39','37','38','9'],
        isBad = false;

    for(var i=bad.length;i--;){
        if(e.keyCode == bad[i]){
            isBad = true;
            break;
        }
    }

    if(this.value.length > 0 && !isBad){
        refreshWookmark(this.value);
    }
});
这将只在输入存在且
keyCode
正确时运行您想要的功能,我认为这正是您想要的


此外,99.9%的时间可以使用
this.value
而不是
$(this.val()
)。这节省了将
This
包装到jQuery对象中,然后使用内部方法获取值(基本上是
This.value
)的开销。

如果值为空,您就不能中断处理程序吗

$(element).keyup(function(e) {
    if (this.value.trim() == '')
        return;

    // do stuff
});

要禁用键控功能或其他功能,请尝试以下操作

  if()
    {
    obj.keyup(function () {
    //code
    });
    }else{
    obj.unbind("keyup")
    }

你能描述一下你想要完成什么吗?似乎只有少数几个按键“键向上”不会在文本框中留下任何内容?欢迎这样做,埃里克!通常情况下,发布您在问题中尝试过的代码,以便其他人可以帮助您。我认为您需要一个keyup(或keydown,等等)事件来跟踪是否应重新启用keyup事件…我删除了我的,因为我认为我不完全理解您在这里尝试执行的操作。有多少个处理程序(绑定到keyup事件)你是否试图阻止执行?keyup事件仍然会发生,不过…我以为他想禁用它。它会发生,但所有功能都会消失,我觉得这比解除绑定和重新绑定更容易。他需要停止传播。也许我只是不明白他想要什么。停止传播会阻止事件冒泡,为什么他会想要呢?因为他想完全禁用keyup事件?我是这样理解的。除非他停止传播,否则keyup事件仍然会发生。是的,但是如果你跳过他不想被激发的处理程序,那也没关系,对吧?从那个特定的处理程序返回不会阻止任何其他处理程序被激发。真的。我在根据这个问题做假设。他真的需要停止事件,还是不需要处理程序执行。。。这就是问题所在。我开始用代理处理程序写答案,但很快它就变得不必要了。谢谢@Ericinlo,这就是我用枪口说出答案的结果!