在Javascript中覆盖警告和确认框

12

有没有一种方法可以覆盖 JavaScript 中的 alert("")confirm("")

我使用 jQuery,因此如果这个框架中有方法可以实现,我会很感激。

我想做类似于:

override alert(msg){
    //Show custom stuff here
}

override confirm(msg){
    //Show custom stuff here.
    return watever;
}
3个回答

27

是和不是。你可以简单地替换它们:

window.alert = function(msg){
    // stuff
}

但是您将无法获得警报和确认所提供的阻塞功能,即没有办法使此代码工作:

if(confirm('Do Something?')){
   // do stuff
}

通常情况下,你最好是编写其他函数来达到类似的功能,而不是试图替换它们。


1
@Lol coder - 是的,如果你替换alert函数,你仍然可以让自己的警告显示出来(但通常是通过DOM节点,而不是模态警告对话框)。但是代码的其余部分将继续运行,不像普通的警告会阻止代码执行。你到底想做什么? - user578895
@cwolves 我想要自定义模态框而不是使用浏览器默认的。例如,我想要创建一个自定义的colorbox弹出框,带有确定/取消按钮,我会编写相应的事件代码。然后根据点击的按钮返回一个值。 - Shawn Mclean
@Lol coder - 如果你想这样做,其实没有必要尝试替换window.alert/confirm。你可以自己创建弹出窗口的函数,或者查看已有的100,000个弹出脚本/插件。 - user578895
@Lol coder - 如果你正在尝试弄清楚如何获取类似确认框的返回值,请了解异步编程。基本上,你需要一个回调函数,你的代码会变成这样:function confirm(msg, cb){ .... cb('Clicked OK'); }confirm('Are you sure?', function(button){ .... }); - user578895
@Lol coder - 不幸的是,至少对于 confirm 函数是这样。正如我所说,没有办法让新的 confirm 函数像内置函数一样运行。对于警报,您通常可以只替换函数,它不会影响任何内容。 - user578895
显示剩余3条评论

2

只需重新定义它:

window.alert = function(msg) { console.log(msg); }

1
哈哈,每个聪明人都这样说吗?如果我问朋友什么事情,“哦,就那样做,很简单的东西。”感谢帮助 :) - Shawn Mclean

1

只需定义一个名为alertconfirm的函数。

function alert(){}; function confirm(){};

然而,如果您需要参考原始函数,则应通过分配var oldAlert或仅在另一个函数内定义alert来保存对它们的引用,以便window.alert保持不变。

(function() {
  function alert(){}; // alert inside of this scope is your custom function
})();

或者你可以替换window.alert并引用window.constructor.prototype.alert :P - user578895

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接