2016-02-05 98 views
0

我試圖替換在JS上使用confirm警報時彈出的基本對話框。 (不jQuery)
基本上我試圖啓動一個函數,打開彈出窗口,作爲參數傳遞我想要運行的命令。然後該命令將作爲onClick函數添加到相應按鈕。JS - 定製「確認」對話框

這裏有一個準系統例如,在命令可以像window.open('location')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()是一個有效的選項?
我在正確的道路上還是應該用回調來重新整理整個事物?
因爲我的理解是,使用回調函數,我需要將每個響應硬編碼到確認按鈕上,而不是像我在這裏試圖做的那樣通過它,這不是一種選擇。

+0

我會建議讓'command'成爲一個回調函數,或者爲回調添加另一個參數。如果'eval'是解決方案,則可能是錯誤的。 –

+0

是的,我也得出了這個結論,事實上'eval()'是我將採取的最後一種解決方案,以防其他選項失敗。無論如何,是不是將'command'變成一個回調函數,使它成爲一個固定的函數,而不是我試圖實現的靈活解決方案? – nxet

+0

不應該,你可以在你調用它時傳遞一個匿名函數,'confirm(function(){/ * do stuff * /});'。 –

回答

0

最後我想通了,而不是傳遞一個字符串,我不得不傳遞一個包含函數的var。
代碼現在看起來像這樣和完美的作品:

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

你可能需要的setTimeout()優勢接受字符串作爲一個完整的語句:

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

這樣,您減少,因爲沒有事件代碼的額外好處關閉彈出窗口需要綁定。