1

私が持っているのは、2 つの関数 (「編集」と「保存」) です。これらは、テーブル セルのクリック イベントとぼかしイベントにそれぞれバインドされたイベント ハンドラーです。基本的に、「編集」はセルの内容を同じ内容の入力に置き換え、保存は反対のことを行います。両方ともDBを更新するためのいくつかのajax呼び出しを伴います。

それはかなりうまくいきます。問題は、2 つのセルを「リンク」したいので、最初のセルの値を変更すると、最初のセルの値に従って 2 番目のセルが更新されることです。

1 つのケースを除いて、それはほとんど機能しています。セル #1 を編集し、値を変更してから、2 番目のセルをクリックするとします。何が起こっているかというと、セル #1 でぼかしイベントがトリガーされ、「保存」関数が呼び出され、最初のセルが新しい値で通常の状態に戻り、セル #2 の値も変更されます。

しかし、クリックしただけなのでクリックイベントはセル#2でもトリガーされるため、「保存」が終了してセル#2への変更が完了する前に、「編集」が呼び出されて処理が開始されます。

私が望むのは、セル#2の「編集」が開始する前に保存が完了するのを待つことです。これにより、正しい値が得られます。

JSなどでイベントを同期することについていくつか読んだことがありますが、これまでのところ問題にうまく適用できていません。

誰でも私を助けることができますか?

ありがとう

4

1 に答える 1

1

すべての「編集」アクションについて、前の「保存」アクションが完了している場合はそれを義務付ける前提条件を適用する必要があります。

例えば:

$('...').click(function() {

    // precondition
    if(saveInProgress) return false;

    // .. you code to switch to edit mode ...

});

$('...').blur(function() {

    // precondition
    if(saveInProgress) return false;

    // AJAX call for saving
    doSave();

});

var saveInProgress = false;
function doSave() {

    saveInProgress = true;
    $.ajax(...,
        success: function() {
            // ... your code ...
            saveInProgress = false;
        },
        error: function() {
            // ... your code ...
            saveInProgress = false;
        }
    );
}
于 2012-07-03T12:32:52.240 に答える