簡體   English   中英

JS-自定義“確認”對話框

[英]JS - custom “confirm” dialog

我正在嘗試替換在JS上使用confirm警報時彈出的基本對話框。 (沒有jQuery)
基本上,我試圖啟動一個打開彈出窗口的函數,將要運行的命令作為參數傳遞。 然后,該命令將作為onClick函數添加到相應的按鈕。

這是一個准系統示例,命令可以是諸如window.open('location')function(par1,par2); function2(par1); function(par1,par2); function2(par1); 或簡單地stuff.innerHTML = 'foo'

function confirm(command) {
    openPopup();
    popup_button_close.onclick = function(){ closePopup(); };
    popup_button.onclick = function(){ command; closePopup(); };
}

不幸的是,上面的示例無法正常工作,我想是因為字符串沒有被解釋為實際代碼,並且彈出窗口在不執行命令的情況下關閉。

您認為什么是最好的方法? 使用eval()是有效的選擇嗎?
我是在正確的道路上還是應該用回調重新約束整個事情?
因為我的理解是,對於回調,我需要對對確認按鈕的每個響應進行硬編碼,而不是像我在此處嘗試的那樣動態地傳遞它,這不是一種選擇。

最后,我發現必須傳遞包含函數的var而不是傳遞字符串。
現在的代碼看起來像這樣,可以完美地工作:

var command = new Function(string);
function confirm(command) {
    openPopup();
    popup_button_close.onclick = function(){ closePopup(); };
    popup_button.onclick = function(){ command(); closePopup(); };
}

您可以利用setTimeout()接受字符串作為完整語句:

function confirm(command) { // as a string "func(p1, p2, ...)"
    openPopup();
    popup_button.onclick = function(){
      setTimeout(command, 10);
    };
    closePopup();
}

這樣,您還可以減少代碼,因為關閉彈出窗口不需要事件綁定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM