2010-08-03 150 views
0

我有一個確認對話框,在您點擊表格嚮導(「#step0Next」)後彈出。目前它在您點擊下一步的按鈕後彈出。當你按下THAT步驟(步驟1)時,我不需要它彈出,而不是當它進入步驟2.如何在對話框中點擊「確定」之前停止按鈕的默認動作?幫助與防止默認

$("#step0Next").live('click', function(event) { 
    event.preventDefault(); 
    if($("#RT").is(":checked") && !$(".ex").is(':checked')) { 
     return confirm ('foo'); 
     //alert("You have not selected any exchanges for which to receive real time market data from. If you continue, you will only receive real time data for market metrics and ten minute delayed data for everything else. Do you wish to continue?"); 
     $(this).die('click'); 
    } 
}); 
+0

你不能給所有這些元素一個類,只是'!$(「。someclass」)。is(':checked')'? Waaaaay更易於維護!同樣'$(this).die('click');'將永遠不會執行,因爲您之前返回。你有演示頁面嗎?不知何故,很難想象什麼是錯的。 – 2010-08-03 18:36:58

+0

我加了班,好點。如何在進行之前使其在同一步驟中彈出。另外,thx幫助縮進代碼。 – 2010-08-03 18:40:09

+0

無論如何這個按鈕是什麼?提交按鈕? 'event.preventDefault();'應該工作... – 2010-08-03 18:42:20

回答

0

confirm()沒有默認操作。而不是返回它,你需要檢查它的返回值後,防止默認值。 (我並不完全遵循你的問題,但我假設你想在用戶點擊確定後繼續......不是「停止默認操作」?)

從現在的位置刪除event.preventDefault()

if(... long if statement ...) { 
    if(confirm("Are you sure? Yadda Yadda")) { 
     // User clicked OK 
    } 
    else { 
     // User clicked Cancel 
     event.preventDefault(); 
    } 
} 

當然,如果你真的想阻止任何被點擊,即使用戶點擊確定,然後離開了preventDefault調用它在哪裏的默認操作。我提供的代碼仍然會告訴你他們在確認對話框中點擊了哪個按鈕。

+0

不知道我跟着,用信息的內容替換.is(':checked')?請澄清 – 2010-08-03 18:59:10

+0

看起來消息是編輯過的......但是沒有「... long if語句...」是你的if語句(已被更改爲(':checked'))... if(confirm ...)而不是返回確認() – Cfreak 2010-08-03 20:15:27

+0

對不起,很愚蠢。我改變了從ID調用元素到一個類來縮短它。總結一下,如果用戶點擊「#step0Next」按鈕從步驟1到步驟2,我需要運行該函數(現在就運行),如果選中了「#RT」,並且沒有一個類爲複選框'.ex'被檢查,不要轉到步驟2並顯示警告/確認對話框。我沒有看到你的代碼是如何工作的,它是基於消息的功能嗎?你能不能用我的代碼或類似的東西來展示一個例子,我需要更好地理解這一點! – 2010-08-03 20:39:29

0

這沒有奏效。這樣做:

<script type="text/javascript"> 
    $("#step0Next").live('click', function(event) { 
     $('#step1Prev').click(); //go back to step 1 
     if($('#RT').is(':checked') && !$('.ex').is(':checked')) { 
      if(!confirm("You have not selected any exchanges for which to receive real time market data from. If you continue, you will only receive real time data for market metrics and ten minute delayed data for everything else. Do you wish to continue?")) return; 
      $('#step0Next').die('click'); 
     } 
     $(this).triggerHandler('click'); 
    }); 
</script>