JS - 定制“确认”对话框

问题描述:

我试图替换在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 * /});'。 –

最后我想通了,而不是传递一个字符串,我不得不传递一个包含函数的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(); 
} 

这样,您减少,因为没有事件代码的额外好处关闭弹出窗口需要绑定。