Javascript JS-定制;“确认”;对话

Javascript JS-定制;“确认”;对话,javascript,callback,popup,eval,confirm,Javascript,Callback,Popup,Eval,Confirm,我试图替换在JS上使用confirm警报时弹出的基本对话框。(无jQuery) 基本上,我试图启动一个打开弹出窗口的函数,将我想要运行的命令作为参数传递。然后,该命令将作为onClick功能添加到相应的按钮中 下面是一个简单的示例,其中命令可以类似于window.open('location')或函数(par1,par2);功能2(par1)或干脆stuff.innerHTML='foo' function confirm(command) { openPopup(); popu

我试图替换在JS上使用
confirm
警报时弹出的基本对话框。(无jQuery)
基本上,我试图启动一个打开弹出窗口的函数,将我想要运行的命令作为参数传递。然后,该命令将作为
onClick
功能添加到相应的按钮中

下面是一个简单的示例,其中命令可以类似于
window.open('location')
函数(par1,par2);功能2(par1)
或干脆
stuff.innerHTML='foo'

function confirm(command) {
    openPopup();
    popup_button_close.onclick = function(){ closePopup(); };
    popup_button.onclick = function(){ command; closePopup(); };
}
不幸的是,上面的示例不起作用,我想是因为字符串没有被解释为实际代码,并且弹出窗口在没有执行命令的情况下关闭

你认为最好的方法是什么?使用
eval()
我走的是正确的道路,还是应该通过回调来重新审视整件事?

因为我的理解是,对于回调,我需要对确认按钮的每一个响应进行硬编码,而不是像我在这里尝试的那样通过友好方式传递,这不是一个选项

最后我发现,我必须传递一个包含函数的变量,而不是传递一个字符串。
代码现在看起来像这样,并且工作得非常完美:

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();
}

通过这种方式,您还可以减少代码,因为关闭弹出窗口不需要事件绑定。

我建议将
command
设置为回调函数,或者为回调添加另一个参数。如果
eval
是解决方案,那么可能是出了问题。是的,我也得出了这个结论,事实上
eval()
是我在任何其他选项失败时会求助的最后一个解决方案。不管怎么说,将
命令
转换为回调函数不是让它成为一个固定函数,而不是我试图实现的灵活解决方案吗?不应该,您可以在调用它时传递一个匿名函数,
确认(function(){/*do stuff*/}).Avoid window.open并在页面内容上使用绝对定位的div。我无法避免它,我知道它会导致回调出现问题,新窗口被阻止。