2013-10-09 79 views
0

假設我有一個函數動態創建'確認或取消'對話框並將點擊事件綁定到「確定」和「取消」鏈接。將點擊事件的結果傳遞給調用函數

function confirmOrCancelDialog() { 
    //already created $dialog to popup on screen 

    $dialog.find('a.confirm').click(function() { 
     //close dialog 
     return true; 
    }); 

    $dialog.find('a.cancel').click(function() { 
     //close dialog 
     return false; 
    }); 

} 

然後,我從另一個函數調用這個對話框的創建。我想將交互的結果傳遞給調用函數。

function performAction() { 
    var clickResult = confirmOrCancelDialog(); 

    if (clickResult === true) { 
     //do some stuff 
    } 
} 

任何有關如何做到這一點的指導,將不勝感激。謝謝。

+0

不可能的,這是一個異步事件 – epascarello

+0

那麼,一些方法來組織,以便它是同步的。 – earthman

+0

您可以使用延遲對象。 – bfavaretto

回答

3
function confirmOrCancelDialog(someStuff) { 
    //already created $dialog to popup on screen 

    $dialog.find('a.confirm').click(function() { 
     //close dialog 
     someStuff(true); 
     return true; 
    }); 

    $dialog.find('a.cancel').click(function() { 
     //close dialog 
     someStuff(false); 
     return false; 
    }); 

} 
function performAction() { 
    confirmOrCancelDialog(function(clickResult){ 
     if (clickResult === true) { 
      //do some stuff 
     } 
    }); 
} 
+0

這種模式是完美的。謝謝! – earthman

+0

@earthman np;) – dbanet

0

你可以只在點擊事件添加到對話對象內的所有錨,然後檢查,看看是否點擊的錨具有確認類(或取消,無論是一個),並相應返回:

$('.dialog a').on('click', function(event) { 
    if ($(this).hasClass('confirm')) { return true; } 

    return false; 
}); 
+0

如果我對它有任何控制,會以相似的方式完成它...感謝您的輸入先生! – earthman

0

試試這個:

function confirmOrCancelDialog(callback) { 
    //already created $dialog to popup on screen 
    $dialog.find('a.confirm').click(function() { 
    //close dialog 
    callback(true); 
    }); 

    $dialog.find('a.cancel').click(function() { 
    //close dialog 
    callback(false); 
    }); 
} 

function performAction() { 
    confirmOrCancelDialog(function(clickResult){ 
    if (clickResult === true) { 
     //do some stuff 
    } 
    }); 
} 
+0

我不記得如果'callback'在點擊處理程序中被調用時仍然在範圍內。如果你得到一個'回調未定義的錯誤,發表評論(甚至更好,一個jsfiddle),我會修改這個使用閉包來保存'回調'引用。 – Plato

+0

對不起@ user1990577我保證我沒有故意複製你的答案<3 – Plato

+0

(爲什麼我不能發表簡短評論......)@Plato;) – dbanet

相關問題