0

window.onbeforeunload の JavaScript コードを以下に示します。ブラウザの戻るボタンを押したときに、ボタンクリックメソッドの背後にあるコードを呼び出しています。

問題は、$("#buttonclientid").click()完了するまでカーソルが停止しないことです。メソッドを呼び出して次のステートメントに移動するだけです。完了するまでカーソルを保持または停止$("#buttonclientid").click()してから次のステップに移動する方法は?

var form_has_been_modified = 0;
  $(function () {

      $("input").keyup(function () {
          form_has_been_modified = 1;
      })
      window.onbeforeunload = function (e) {
          if (!form_has_been_modified) {
                  return;
          }
                doYouWantTo();
      }

   });

   function doYouWantTo(){
        doIt=confirm('Do you want to save the data before leave the page?');
        if (doIt) {
             var returnbutton;
             //cursor should stop here until click function completes.
             returnbutton = $("#buttonclientid").click();
        }
        else{

            }
        }
4

2 に答える 2

1

あなたの問題は、doYouWantTo関数が返される値を返さないonbeforeunloadため、関数が完了するまで待つのではなく、関数の実行中にページを離れているという事実にあると思います。

ここでの最善のアクションは次のようなものです。

return doYouWantTo()
....
if(doIt) {
    $('#buttonclientid').click(function() { // unsure if you can attach callback to click but idea is same
        return true;
    });
} else {
    return true;
}
于 2012-09-05T15:13:14.587 に答える
0

イベント ハンドラーをイベントにバインドする場合onbeforeunload、次の 2 つのいずれかを返す必要があります。

  • 確認を表示したい場合、ハンドラーは文字列を返す必要があります
  • 確認を表示したくない場合 (ハンドラーをスキップ)、戻るundefined(またはまったく戻らない、同じ効果)

そうは言っても、コードは次のようになります。

var form_has_been_modified = false;
$("input").keyup(function () {
    form_has_been_modified = true; // use a boolean :P
});

window.onbeforeunload = function (e) {
    if (form_has_been_modified) {
        return 'Do you want to save the data before leave the page?';
    } else {
        return undefined; // this can be omitted if you prefer
    }
};

ユーザーがシステム ダイアログで何をクリックしたかを知る唯一の方法は、 を使用することsetTimeoutです。そのテーマの詳細については、この質問を参照してください。

于 2012-09-05T15:15:30.730 に答える