你不能。只有特殊的内置函数才能做到这一点。有一段时间,有一个
showModalDialog特殊内置,让你指定一个URI的内容,从而自定义它,但它从来没有得到广泛支持,现在已被弃用,即使由曾经支持它的浏览器。
相反,使您的当前警报函数使用div接受警报关闭时的回调(或返回在关闭时返回的确认),以允许您继续处理。
例如,如果你的代码用来使用alert和工作,像这样:
function foo() {
var x;
x = doSomething();
alert("Alert! Alert!");
doSomethingAfterTheAlertIsCleared(x);
doAnotherThingAfterward();
}
…您可以将其更改为:
function foo() {
var x;
x = doSomething();
fakeAlert("Alert! Alert!", function() {
doSomethingAfterTheAlertIsCleared(x);
doAnotherThingAfterward();
});
}
注意,现在所有跟在警报之后的代码都在一个函数中,它的引用传递给fakeAlert。 foo函数返回,同时假警报仍然显示,但最终用户关闭假警报,我们的回调被调用。注意,我们的回调代码可以访问我们正在处理的foo调用中的本地化,因为我们的回调是一个闭包(不要担心,如果这是一个相当新的和/或神秘的术语,closures are not complicated)。
当然,如果跟随警告的唯一的事情是单一的函数调用,不接受任何参数,我们可以直接传递该函数引用。例如:
function foo() {
doSomething();
alert("Alert! Alert!");
doSomethingAfterTheAlertIsCleared();
}
变为:
function foo() {
doSomething();
fakeAlert("Alert! Alert!", doSomethingAfterTheAlertIsCleared);
}
(注意,doSomethingAfterTheAlertIsCleared之后没有() – 我们指的是函数对象,不调用函数; fakeAlert会调用它。)
如果你不确定fakeAlert如何调用回调,它将在用户“关闭”警报div的事件处理程序内,你只需调用回调的参数,就像对任何其他引用功能。所以如果fakeAlert接收它作为回调,你通过调用callback();.