2

5 つのステップに分割されたフォームがあります。現在、手順 2 ~ 4 で更新/終了/終了などを行うと、window.onbeforeunload を介してメッセージが返されますが、問題はありません。

window.onbeforeunload = function () {
            if ( $("#step1").is(":visible") || $("#step2").is(":visible") || $("#step3").is(":visible") ) {
                return 'Using the browsers back, refresh or close button will cause you to lose all form data. Please use the Next and Back buttons on the form.';
            }
        }

チェックボックス「A」がチェックされ、チェックボックス「B」がチェックされていない場合、ステップ0(最初のステップ)に同じまたは同様のタイプの動作を追加する必要があります。これは機能しますが、別の .onbeforeunload 関数と組み合わせることはできません

window.onbeforeunload = function () {
            if ( $("#A").is(":checked") && $("#B").is(":not(:checked)") ) {
                return 'Message here. Do you wish to continue?';
            }
        }

これら2つを連鎖させるにはどうすればよいですか?if、else ステートメントを使用しても機能しないようです。

4

1 に答える 1

3

次のように、それらを 1 つの関数に組み合わせることができます。

window.onbeforeunload = function () {
  if ( $("#A").is(":checked") && !$("#B").is(":checked") ) {
      return 'Message here. Do you wish to continue?';
  }
  if ( $("#step1, #step2, #step3").filter(":visible").length) {
      return 'Using the browsers back, refresh or close button will cause you to lose all form data. Please use the Next and Back buttons on the form.';
  }
}

他のセレクターを単純化して、すべての要素を.filter()1 つだけ取得し:visible、( > 0) があるかどうかを確認しまし.lengthた。これは、維持しやすい方法です。

また、最初の に追加のチェックを追加することもifできます。次のように、そのステップにいることを確認してください。

if ($('#step0').is(':visible') && $("#A").is(":checked") && !$("#B").is(":checked") ) {
于 2010-08-03T15:57:42.557 に答える