3

我有一个在输入的最大长度上触发的 ajax 调用。但是,如果用户继续输入字符(因为它们算作按键),它会继续触发。有没有办法在 5 个字符限制之后防止额外的 ajax 调用?

html

<input type="text" value="" id="billZipCode" name="billZipCode" class="smallInput coreAddrBill" maxlength="5">

javascript

//show city/state on input maxlength
$("input#billZipCode").live("keyup", function( event ){
    if(this.value.length == this.getAttribute('maxlength')) {
        if ($(this).valid() == true ) {
            zipLookup(this, "USA");

        }
    }
});
4

3 回答 3

2

在字段上设置一个.data属性:

//show city/state on input maxlength
$("input#billZipCode").live("keyup", function( event ){

    if(this.value.length == this.getAttribute('maxlength')) {
        if(!$(this).data('triggered')) {
            // set the 'triggered' data attribute to true
            $(this).data('triggered',true); 
            if ($(this).valid() == true ) { zipLookup(this, "USA"); } 
        }
    } else { $(this).data('triggered',false); }

});

if如果您想继续运行它直到邮政编码有效,请在第二条语句中移动分配。

于 2012-08-03T18:58:14.110 回答
0

使用布尔变量来了解是否已经触发了调用(将其初始化为 false,在调用之前断言它仍然为 false,并在调用时将其设置为 true)。

于 2012-08-03T18:56:43.843 回答
0

尝试这个:

var ready = true;
$("input#billZipCode").on("keyup", function( event ){
    if(this.value.length == this.getAttribute('maxlength')) {
        if ($(this).valid() && ready) {
            zipLookup(this, "USA");
            ready = false;  
        }
    }
});
于 2012-08-03T19:00:45.653 回答