2010-08-03 69 views
2

我有一個表格分成5個步驟。目前,如果您在步驟2-4中刷新/退出/關閉等,它會通過window.onbeforeunload返回一條消息,在那裏沒有問題。如果條件滿足,顯示警報,幾乎像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語句似乎不起作用。

+0

這是否與你是如何加入他們嗎?一目瞭然一個任務將覆蓋另一個,但如果您使用jquery.bind(http://api.jquery.com/bind/),那麼我認爲它會正確處理添加多個事件處理程序...(作爲評論因爲我不確定是否可以作爲答案)。 – Chris 2010-08-03 15:59:16

回答

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")) { 
+0

嘿尼克,這裏是頁面https://www.kinetick.com/purchase測試它沒有按照需要工作。也許我不需要#step0的onbeforeunload?只有當我刷新時,它纔會在下一次觸發時觸發。這應該是一個驗證的事情?如果是這樣,如果需要選擇,我該如何避免陷入循環?如果「#A」只是一個警告,那麼檢查「#B」並不是絕對的。 – 2010-08-03 16:09:12

+0

@Dirty - 就你的情況而言,聽起來你想要在第一個「下一步」按鈕上進行A/B檢查,這是否正確? – 2010-08-03 16:40:19

+0

是,由於某種原因,這是不工作... <腳本類型= 「文/ JavaScript的」> \t \t $( 「#step0Next」)。一個( '點擊',函數(){ \t \t \t如果$(「#A」)。is(「:checked」)&& $(「#B」)。is(「:not(:checked)」)){ \t \t \t alert(「foo」); \t \t} \t}); \t – 2010-08-03 16:41:26