如果满足条件,则显示警报,几乎与onbeforeunload一样

时间:2010-08-03 15:55:54

标签: jquery onbeforeunload

我有一个分为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.';
            }
        }

现在我需要在step0(第一步)添加相同或相似类型的行为,如果选中复选框“A”并且复选框“B”不是。这有效,但不能与另一个.onbeforeunload函数结合使用

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

我如何将这两者连在一起?使用if,else语句似乎不起作用。

1 个答案:

答案 0 :(得分:3)

您可以将它们组合在一个函数中:

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():visible个,并查看是否有任何(.length> 0),这只是一个更容易 - 保持这种方式。

此外,您可能需要向第一个if添加额外的检查,确保您正在执行该步骤,如下所示:

if ($('#step0').is(':visible') && $("#A").is(":checked") && !$("#B").is(":checked") ) {