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()
是一个有效的选项?
我在正确的道路上还是应该用回调来重新整理整个事物?
因为我的理解是,使用回调函数,我需要将每个响应硬编码到确认按钮上,而不是像我在这里试图做的那样通过它,这不是一种选择。
答
最后我想通了,而不是传递一个字符串,我不得不传递一个包含函数的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();
}
这样,您减少,因为没有事件代码的额外好处关闭弹出窗口需要绑定。
我会建议让'command'成为一个回调函数,或者为回调添加另一个参数。如果'eval'是解决方案,则可能是错误的。 –
是的,我也得出了这个结论,事实上'eval()'是我将采取的最后一种解决方案,以防其他选项失败。无论如何,是不是将'command'变成一个回调函数,使它成为一个固定的函数,而不是我试图实现的灵活解决方案? – nxet
不应该,你可以在你调用它时传递一个匿名函数,'confirm(function(){/ * do stuff * /});'。 –