0

でトリガーされるこのjqueryajax呼び出しがありkeyupます。これにはエラー処理があり、ユーザーがキーストロークをすばやく入力すると(たとえばFirefoxの場合)複数回トリガーされます。表示される複数のアラートウィンドウを停止する簡単な方法はありますか?

$('input[name$="_LOC"]').keyup(function(){

    if ($(this).val().length >=4){

        $.ajax({
            type: 'POST',
            url: 'red.asp?q='+$(this).val(),
            beforeSend: function() {
                    [...]   
            },
            success: function(data) {
                [...]
            },
            error: function() {
                alert("Oops!")
            }
        }); 
    }
});
4

1 に答える 1

0

オンキーアップがトリガーされるたびにタイマーを再起動します。これは、ユーザーが入力を終了したとき(または、少なくとも1秒間一時停止したときなど)にのみイベントが発生することを意味します。

使用するtimer = setTimeout(yourFunction, yourDelay);

タイマーユーザーを休ませclearInterval(timer)、setTimeoutを再開します。

var typing = false;
var timer;

$('input[name$="_LOC"]').keyup(function(){
 if(typing) {
   clearInterval(timer);

 }
timer = setTimeout(sendAjax, 500, [this]);
 typing=true;
});

function sendAjax(element) 
{
    if ($(element).val().length >=4){

        $.ajax({
            type: 'POST',
            url: 'red.asp?q='+$(element).val(),
            beforeSend: function() {
                    [...]   
            },
            success: function(data) {
                [...]
            },
            error: function() {
                alert("Oops!")
            }
        }); 
    typing = false;   
   }

JSFiddleの例を次に示します。http://jsfiddle.net/X8US5/ ブラウザのconsole.logビューアでコンテンツを表示できるようにする必要があります(そうでない場合は、console.logを編集してアラートにしますが、JSに割り込むため、時間がオフになります)

編集: IE9互換(ハック)バージョンhttp://jsfiddle.net/5ndM5/1/ jQueryの代替を見つけようとしましたが、見つからなかったようです。グローバル変数が必要ない場合は、代替関数をオーバーライドすることをお勧めしますが、このコードを1つのフォームでのみ使用する場合は、グローバルを使用できます(JSコードは通常、偶然にそれらに溢れています)

于 2012-11-14T21:56:02.213 に答える