2012-04-03 19 views
1

私は、ページと送信ボタンにテキストボックスの束を持っています。テキストボックスのTextChangedイベントを結んで、サーバー側のメソッドを実行しました。ユーザは、テキストボックスに値を入力し、次のテキストボックスにタブアウトし(textchangedイベントをトリガする)、最後に別のサーバ側メソッドを呼び出す送信ボタンをクリックする。すべての機能は非同期です。 submitメソッドは、両方が同じデータを共有するため、textchangeメソッドが終了した後にのみ実行する必要があります。問題は、textchangeメソッドが終了するのに少し時間がかかることがあり、textchange関数が完了する前にsubmitメソッドがトリガーされる場合があります。これをどうやって防ぐのですか?どのように機能をロック/キューするのですか?jquery - この競合状態を防ぐ

答えて

1

何もロックしないでください。変更イベント+ ajaxが完了するまで、送信ボタンを無効にするだけです。

$('#submitBtn').attr('disabled', 'disabled'); 

またはjQueryの1.6+のために:

$('#submitBtn').prop('disabled', true); 

と変更Ajaxの仕上げ:

$('#submitBtn').attr('disabled', '');//or $('#submitBtn').prop('disabled', false) 
+0

私はこれまで考えていましたが、私のケースでは、ユーザーが最後のテキストボックスにいるとき、タブアウトしてテキストボックスの変更機能をトリガーしないという問題があります。送信ボタンを直接クリックすると、テキストボックスの変更機能がトリガーされます。送信を無効にすると、ボタンやフォーム上の他の場所をクリックして変更をトリガーしません。その他の提案はありますか? – tempid

+0

@enigma。すべての変更イベントが完了したら、trueでフラグを保存します。サブミットイベントをキャプチャし、フラグがfalseの場合はデフォルトを防ぎます。それはどうですか? – gdoron

+0

ありがとう、これは私がやったことです、それはうまくいくようです。 – tempid

関連する問題