2012-12-19 60 views
10

我的頁面上有一個使用JQuery對話框小部件製作的對話框。 我已經設置了兩個按鈕,其功能將點擊頁面上的不同按鈕,這將觸發頁面的回傳並執行各種操作。 當對話框是模式:假,對話框將執行相關clickButton功能,但是,當我設置模式:真,該按鈕將不會被點擊,雖然進入功能。在回答JQuery對話框時JavaScript不執行

我想我錯過了什麼模式:真做關於執行與按鈕相關的功能。

下面是我javasript

function displayQuoteToCashMessage() { 
     //this is where we do that alert for the QuoteToCash request stuff 
     $("#<%=divQuoteToCashAlert.ClientId %>").show(); 
     $("#<%=divQuoteToCashAlert.ClientId %>").dialog({ 
      modal: false, 
      resizable: false, 
      buttons: { 
       "Ok": function() { 
        //save confirmations 
        clickButton(true); 
        $(this).dialog("close"); 
       }, 
       "No": function() { 
        clickButton(false); 
        $(this).dialog("close"); 
       } 
      } 
     });   
    } 

    function clickButton(b) { 
     //do something with b 
     document.getElementById(btnSave).click() 
    }; 
+2

五upvotes這個問題?我錯過了什麼嗎? – j08691

+0

@ j08691讓9大聲笑 –

回答

4

莫代爾防止各類事件/和行動,在覆蓋本身,任何DOM 事件下方。但是正常的函數調用,像你的:clickButton()罰款,如果你在該函數的開始處發出警報,你會看到它到達那裏。

您遇到的問題是,您要與互動,並click一個DOM元素是模態低於(這就是正在這裏否認

// It gets here without a problem 
function clickButton(b) { 

    // But this event here is what *modal* is preventing. 
    document.getElementById(btnSave).click(); 
} 

我總是這樣做,首先是關閉對話,然後執行任何外部腳本(特別是如果我知道他們嘗試觸發dom事件)。通過這樣做,你不會有任何問題。

jsFiddle DEMO

buttons: { 
    "Ok": function() { 

    $(this).dialog('close'); 

    // now wait a 100 ms for it to fully close 
    // this is mainly for the slow browsers, "just in case" really 

    setTimeout(function() { 
     clickButton(); // now we call your function (knowing the modal is gone) 
    }, 100); 
    } 
} 

這微小的延遲僅僅是櫃面,未顯着,並會讓你運行你的功能,同時保持modal:true

2

嘗試close事件:

var okButtonWasClicked = false; 
$("#<%=divQuoteToCashAlert.ClientId %>").dialog({ 
    buttons: { 
     "Ok": function() { 
      okButtonWasClicked = true; 
      $(this).dialog("close"); 
     }, 
     "No": function() { 
      okButtonWasClicked = false; 
      $(this).dialog("close"); 
     } 
    }, 
    close: function() { 
     if(okButtonWasClicked) { 
      clickButton(true); 
     } else { 
      clickButton(false); 
     } 
}); 
+0

+1不錯的選擇我喜歡它 –