2

とを含むフォームがRepeaterありRadioButtonListますTextBox。ユーザーがラジオボタンまたはテキストボックスの1つにあるテキストを変更すると、選択したアイテムとそのリピーターアイテムに関連付けられたテキストがデータベースに保存されます。

.change()ラジオボタンが変わったときの保存は機能のおかげで簡単ですが、TextBox私はテキストが変わったときにユーザーが入力を停止してから2秒後にデータを保存するタイマーを作成しています

問題は、タイマーが実行される前にユーザーがページを離れたり、別のテキストボックスに入力し始めたりした場合、手動でタイマーを実行する必要があることです。どうやってやるの?

私のJavaScriptは次のようになります。

var typingTimer;                //timer identifier
var doneTypingInterval = 2000;  //time in ms, 2 second for example

$('textarea').on('input', function () {
    // Clear timer
    clearTimeout(typingTimer);

    // Set new timer to save form, passing current repeater item to Save method
    var parent = $(this).closest('.my-repeater-section');
    typingTimer = setTimeout(function () { saveForm(parent); }, doneTypingInterval);
});
4

2 に答える 2

2

タイマーは単なる遅延関数呼び出しです。したがって、関数に名前を付けると、「手動で」呼び出すことができます。

var typingTimer;                //timer identifier
var doneTypingInterval = 2000;  //time in ms, 2 second for example

$('textarea').on('input', function () {
    // Clear timer
    clearTimeout(typingTimer);

    // Set new timer to save form, passing current repeater item to Save method
    var parent = $(this).closest('.my-repeater-section');

    function callback() {
        saveForm(parent);
    }

    typingTimer = setTimeout(callback, doneTypingInterval);

    // call it manually like usual:
    // callback();
});
于 2012-12-10T16:22:02.947 に答える
2

ぼかしで保存関数を呼び出すと、ユーザーがそのテキストエリアを離れるとフォーカスが失われ、そのイベントを聞くと、そこで保存関数を使用できます。

 $("textarea").blur(function(){
  //Call your save function here
});
于 2012-12-10T16:25:05.367 に答える