2011-03-21 120 views

回答

8

你用錯誤的方式對話框

你應該做這樣的

$("#dialog-confirm").dialog({ 
resizable: false, 
height: 140, 
modal: true, 
buttons: { 
    Proceed: function() { 
      call_true_function(); 
     $(this).dialog("close"); 
    }, 
    Cancel: function() { 
     call_false_function() 
     $(this).dialog("close"); 
    } 
} 
}); 

或類似的東西

**編輯**

所以這樣的事情?

count = 0; 
$("#dialog-confirm").dialog({ 
resizable: false, 
height: 140, 
modal: true, 
buttons: { 
    Proceed: function() { 
      proceed(); 
     $(this).dialog("close"); 
    }, 
    Cancel: function() { 
     $(this).dialog("close"); 
    } 
} 
}); 

function proceed(){ 
    if (count != 10){ 
     $("#dialog-confirm").dialog('open');  
    }else{ 
     $('body').append("<div>Yes was selected " + count + " times!</div>"); 
    } 
} 
+0

^這樣例如 – Paul 2011-03-21 20:53:40

+0

@保羅謝謝! – mcgrailm 2011-03-21 20:56:17

+0

@mcgrailm雖然我意識到這是對話框應該被使用的方式,但是這種實現並不能很好地爲用戶提供一系列問題,然後根據聚合響應執行某些操作。或者,我只是想念它。我想不出有什麼辦法,至少不是沒有做回調函數Call_Question_N + 1()這樣的事情,這會在一系列對話框中創建下一個。對於像[this]這樣的東西,這看起來似乎是一個很鈍的解決方案(http://jsfiddle.net/EvilAmarant7x/r7Ur5/4/) – EvilAmarant7x 2011-03-22 12:57:21

9

不幸的是,如果你使用一個自定義的確認/模態窗口,這是不可能的。您將不得不使用回調或選擇使用隨1.5引入的新對象deferred

使用延遲會是這個樣子:

var dfd = new $.Deferred(); 
$("#dialog-confirm").dialog({ 
    resizable: false, 
    height: 140, 
    modal: true, 
    buttons: { 
    Proceed: function() { 
     dfd.resolve('Success!'); 
     $(this).dialog("close"); 
    }, 
    Cancel: function() { 
     dfd.reject('Uh-oh!'); 
     $(this).dialog("close"); 
    } 
    } 
}); 

dfd.then(function() { 
    // perform next action when user clicks proceed 
}); 

dfd.fail(function() { 
    // perform some action when the user clicks cancel 
});