2010-08-03 20 views
1

我有一個表單嚮導。在第一步中,我需要顯示一個警告,如果某個複選框被選中,而其他類別不是。問題在於它在點擊下一個按鈕後的第二步中顯示確認/警告。我需要它來防止瀏覽器在顯示警告時轉移到第二步。幫助preventDefault在活動功能和點擊事件中

$("#step0Next").live('click', function(event) { 
     var ask = confirm("Do You Really Want To Continue"); 
     if($("#RT").is(":checked") && !$(".ex").is(':checked') && 
(ask===false)) { 
      event.preventDefault(); 
     } 
    }); 

http://www.kinetick.com/Test/purchaseTest 如果你沒有做任何選擇,然後點擊「下一步」(「#step0Next」),轉到步驟2的確認對話框。我需要在第1步發生,按取消會讓你保持在那裏,點擊確定可以讓你繼續進行第2步。如果有問題,使用formToWizard.js插件即可。

的感謝!

+0

我在下面添加了一個解決方案,它不是理想的tbh,但是沒有編輯插件並在裏面暴露'selectStep()'方法,這裏沒有太多選擇。 – 2010-08-04 00:29:29

回答

1

警告,這是一個有點哈克和您的具體需要與本站(別人發現這一點,使用其他的解決方案!):

$("#step0Next").live('click', function(event) { 
    $('#step1Prev').click();          //go back, hacky! 
    if($("#RT").is(":checked") && !$(".ex").is(':checked')) {   //conditons 
    if(!confirm("Do You Really Want To Continue")) return; //user said cancel 
    $("#step0Next").die('click');  //user said Ok, prevent prompting again 
    } 
    $(this).triggerHandler('click');      //resume normal behavior 
}); 

因爲你不能覆蓋正常的表單行爲(其點擊處理程序發生在您的.live()之前),我們只是繞過它。這很快就點擊了下一頁的按鈕,將返回到第一頁,所以不是阻止「下一個」行爲,我們只是在UI更新之前倒轉它。

然後如果條件不符合,我們提示用戶確認他們的「繼續前進」選擇,但只有一次,如果他們點擊取消,我們會繼續提示,如果他們點擊確定,我們讓他們繼續前進,不會再打擾他們,通過使用.die()來移除這個.live()處理程序。

+0

@尼克 - 你是個天才。這很好。我討厭要求更多,但是你能否稍微解釋一下,以便我的理解是正確的?我不完全理解「$('#step1Prev')。click()」 - 我得到,如果你從步驟2(真正的數組中的step1)回來,它不會觸發該函數。如何?然後「如果(!確認(」你......「))返回; - 是不是說如果不確認?再次,非常感謝,我知道你花了一些時間,我只是想了解它所以我學習,不僅僅是c&p!謝謝你。 – 2010-08-04 01:12:09

+0

@Dirty - 點擊觸發立即返回第1步,不管怎樣,如果條件不滿足,我們會提示,如果點擊取消()== false),那麼我們返回,我們已經回到第一步,所以只是呆在那裏,如果他們點擊好,而不是解除綁定這個處理程序,所以它不會再次提示,如果條件滿足,那麼我們只是觸發點擊處理程序已經在'#step0下一步'按鈕,這需要我們到下一頁,是有道理的? – 2010-08-04 01:15:29

+0

@尼克 - 好吧,現在我得到什麼「$('#step1Prev')。click();」但是它是一個空函數();?所以我不明白爲什麼我們甚至需要它,因爲我們正在處理step0Next按鈕。在$('#step0Next')。die('click');這就是我們如何解除經理人權利?他們說如果他們點擊「確認」(confirm()=== true)不會再次提示並繼續前進。男人真棒的東西。 – 2010-08-04 01:26:17