现在的问题是,这不能像我们使用alert()一样帮助我更改整个站点的确认对话框。
没错 无法在本机Javascript中重现alert / confirm /
prompt函数的同步性质。有一种非标准的方法
showModalDialog可以使用单独的弹出式文档来执行此操作,但是并非所有浏览器都支持该方法,通常认为这是非常不可取的。
因此,插件替换策略无法正常工作。您将不得不在脚本的其余部分中更改调用这些方法的每个位置。
通常的模式是使用内联匿名函数执行此操作,以使用闭包(例如)保留局部变量。更换:
function buttonclick() { var id= this.id; if (confirm('Are you sure you want to frob '+id+'?')) frob(id); wipe(id);}与:
function buttonclick() { var id= this.id; myConfirm('Are you sure you want to frob '+id+'?', function(/confirm/ied) { if (/confirm/ied) frob(id); wipe(id); });}如果需要
this保留,则需要查看另一个嵌套的闭包或function.bind来完成。如果您要
/confirm/i循环调用,则事情会变得更加困难。
显然,您还必须确保在确认框打开时,关键的全局状态不会改变。通常,通过将页面的其余部分显示为灰色以使点击无法通过,可以将这种风险降到最低。但是,如果超时,它们仍然可以触发。



