2

POSTデータをテキストボックスからPHPページに送信して処理しています。ユーザーが保存ボタンをクリックするのではなく、AJAXがテキストボックスイベントで使用されます。

onChangeとonKeyUpのどちらを使用するかがわかりません。

キーを押すたびにスクリプトがデータベースにアクセスして変更を加える必要があるため、OnKeyUpはサーバー上でより多くの処理を必要とします。サーバーのパフォーマンスが問題になる可能性があります。

OnChangeは、ユーザーがボックスの操作を終了したときにのみ変更を送信するため、推奨されます。ただし、テキストボックスの選択を解除しないと、イベント「onChange」が発生しないため、変更が保存されないという問題があります。

どちらが最適ですか?または、ユーザーがボックスの選択を解除せずに「onChange」を適用する方法はありますか?

4

3 に答える 3

1

どのシナリオで、ユーザーはテキストボックスをぼかしず、AJAXが発生しませんか?

考えられる解決策の1つは、タイムアウトをkeyDownとkeyUpに設定して、一定期間入力しなかった後、AJAXがこれらの線に沿って起動するようにすることです。これにはおそらく、テキストボックスが実行される前に別のテキストボックスに入力し始めた場合にテキストボックスが更新されない可能性があるというバグがあり$.ajaxますが、アイデアを得ることができるはずです。

var key_is_down = false,
    key_timeout;

$(el).on('keyDown', function () {
    key_is_down = true;
}).on('keyUp', function () {
    key_is_down = false;
    key_timeout = setTimeout(function(){ runAjax($(this)); }, 2500);
});

function runAjax ($el) {
    if (key_is_down) {
        key_timeout = setTimeout(function(){ runAjax($el); }, 2500);
    } else {
        // $.ajax...
    }
}
于 2012-10-12T11:35:59.820 に答える
1

KeyUpプレスajax呼び出しを使用することもできます、どうやって?? keyUpイベントにdelayKeyUp関数を追加するだけで、delayKeyUp関数にはsetTimeoutメソッドがあります。これは、サーバー処理に関する懸念事項に従って、実際に役立ちます。

注:これは、一度に1つのメソッドで正常に機能します。

元。コード:

アップデート:

$("selector").live('keyup', function(e) { //if jquery v1.7 or more then you can use .on event instead of .live
    delayKeyUp(function(){ ---Your Server Call Stuff -----}, 350); //delay of 350ms.
    return false;
});


var delayKeyUp = (function(){
     var timer = 0;
     return function(callback, ms){
        clearTimeout (timer);
        timer = setTimeout(callback, ms);
     };
})();
于 2012-10-12T11:39:06.047 に答える
0
window.page_loaded = new Date();
$('text_field').bind('keyup', function(){
    var timeout_seconds = 10;

    var last_check = $(this).data('last_checked');
    last_check = last_check ? last_check : window.page_loaded;
    var curr_time = new Date();
    curr_time = new Date(curr_time.getTime() - (timeout_seconds * 1000));
    if(last_check < curr_time){
        //now do the checking
    }
});
于 2012-10-12T11:51:56.470 に答える