JS - 自定义“确认”对话框

时间:2016-02-05 09:01:19

标签: javascript callback popup eval confirm

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

这是一个准系统示例,其中命令可以是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()是否有效? 我是在正确的道路上还是应该用回调来重建整个事情? 因为我的理解是,通过回调,我需要对确认按钮的每一个响应进行硬编码,而不是像我试图在这里做的那样传递它,这不是一个选项。

2 个答案:

答案 0 :(得分:0)

最后我发现,我不得不传递一个包含该函数的var,而不是传递一个字符串 代码现在看起来像这样并且完美地运行:

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

答案 1 :(得分:0)

您可以利用setTimeout()接受字符串作为完整声明:

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

这样你还可以减少代码,因为关闭弹出窗口不需要事件绑定。