如何使“keydown”事件阻止“keyup”事件?

4
我有一个邮编解析器,使用keyup事件处理程序来跟踪输入长度是否达到5个字符,然后查询服务器以解析邮政编码。但我想避免不必要的脚本调用,所以我想知道是否有一种方法可以追踪keydown事件,并在文本框中已经有5个字符时停止keyup事件(这可能表示已经提交了查询),如果有一种方法可以停止keyup事件处理程序吗?我知道这有点奇怪,所以请随时提问。下面是我所说的布局示意图:
$('#zip_resolver').live('keydown', function(event){
    if($(this).val().length==5){
        //STOP KEYUP EVENT
    }else{
        //DO NOTHING
    }
});
$('#zip_resolver').live('keyup', function(){
    if($(this).val().length==5){
        //SEND RESOLVE REQUEST
    }
});

不确定您是否已经知道,但输入字段上有最小/最大字符长度选项。 - ajax333221
2个回答

3

您可以仅强制执行 keydown 为 4: http://jsfiddle.net/rkw79/H7PhT/1/

$('#zip_resolver').live('keydown', function(event){
   wasfour = (4 == $(this).val().length);
});
$('#zip_resolver').live('keyup', function(){
    if($(this).val().length==5  && wasfour){
        //SEND RESOLVE REQUEST
    }
});

1

不要使用 keydown 事件,你可以考虑使用一个布尔标志,在 keyup 中检查以决定是否需要执行 resolve 操作。

类似于以下代码:

if (doresolve && length == 5) {
   resolve();
   doresolve = false;
} else if (!doresolve && length <> 5) {
   doresolve = true;
}

这样,当您编辑该字段时,解析器检查会重新进行。


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