Javascript JS-定制;“确认”;对话
我试图替换在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
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。我无法避免它,我知道它会导致回调出现问题,新窗口被阻止。