当前位置: 首页 > 面试题库 >

要解决的JavaScript难题:window.confirm = divConfirm(strMessage)

苏坚成
2023-03-14
问题内容

场景是:旧站点,其中已经编写了许多JS代码。如果用户想将所有警报消息更改为基于新时代爵士乐Div的警报,则使用JQuery,YUI,Prototype
…等非常常见。
主要有树JS对话框
1.警报

要更改它的简单性,我们只需要编写新函数即可显示div弹出窗口并显示消息,然后覆盖窗口。

` function showDivAlert(strMessage){
//div popup logic and code
}

window.alert = showDivAlert;
`

2.提示

这个看起来很容易编写的函数可以接受字符串并显示输入值的文本框。现在,由于单击“确定”按钮即可返回操作,因此此处的生活很容易。

function shoDivPromp(strMessage){ //div pop up to show the text box and accept input from the user } window.prompt = shoDivPromp;

3.确认

现在上面的两个很容易覆盖和修改默认对话框,但是确认很复杂。
但是,默认的JS确认对话框将停止JS执行,并且当用户单击确定或通过确定返回值(true / false)恢复取消执行时。但是,如果我们使用div
popup,执行就不会停止,这是有问题的。
我们仍然可以实现确认,但是在那种情况下,我们必须为OK和CANCEL情况绑定方法,这些方法将附加到OK和CANCEL按钮上。有了这个功能,签名就会像。
function newConfirm(msg, fun OkAction(), fun CancelAction)

现在的问题是,这不能像我们使用alert()一样帮助我更改整个站点的确认对话框。 问题
我不确定是否可以实现,但是我认为可以使用某些JS模式。所以让我知道是否可能。


问题答案:

现在的问题是,这不能像我们使用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(confirmed) {
        if (confirmed)
            frob(id);
        wipe(id);
    });
}

如果需要this保留,则需要查看另一个嵌套的闭包或function.bind来完成。如果您要confirm循环调用,则事情会变得更加困难。

显然,您还必须确保在确认框打开时,关键的全局状态不会改变。通常,通过将页面的其余部分显示为灰色以使点击无法通过,可以将这种风险降到最低。但是,如果超时,它们仍然可以触发。



 类似资料:
  • 有许多实际问题被证明是NP难的。如果我们假设P≠NP,这些问题没有任何多项式时间算法。 如果你必须解决这些问题中的一个,你有希望高效地解决吗?还是你只是运气不好?

  • 问题内容: 我正在寻找使用的8难题问题的解决方案。我在互联网上找到了 这个 项目。请查看文件- 和。proj1包含程序(函数)的入口点,EightPuzzle描述拼图的特定状态。每个状态都是8拼图的对象。 我觉得逻辑上没有错。但是对于我尝试的这两个输入,它永远循环:和。它们都是有效的输入状态。代码有什么问题? 注意 为了更好地查看,请在Notepad ++或其他文本编辑器(具有识别Java源文件的

  • 抱歉打扰你们了。我知道,这个问题已经问了好几遍了。然而,我就是无法解决我的问题。 所以,我一直在尝试创建一个网球计分系统,当你点击两个按钮之一,赢按钮或输按钮时,就会显示出分数。我有一个按钮,他们可以在那里添加他们的名字到计分系统。当一个选手赢了两盘,比赛就结束了。然后我试着印上他们的名字,上面写着,____赢了比赛。当我尝试使用打印它们名称的变量时,我得到的结果是:[objectHTMLButt

  • 我已经尝试了在不同的包中添加类的各种可能的方法,比如在包com.packageName中添加应用程序类,在不同的包名model中添加控制器,当我试图执行程序时,它返回默认的白标签错误,当我将这些类放在同一个包中时,它成功地运行。 所以我想问是否有任何问题与项目或我需要给出任何路径。之前,我也尝试过表示组件扫描的符号,除了to之外,其他都没有用到

  • ~$npm安装-g yo npm错误!达尔文14.3。0 NPM ERR!"节点"/usr/本地/bin/npm""安装"-g""yo" npm错误!节点v0。12.5 npm错误!npm v2。14 npm错误!路径/usr/local/lib/node_模块/yo npm错误!代码EACCES NPM ERR!errno-13 npm错误!错误:EACCES,rmdir'/usr/local/

  • 这里应该如何处理border重复加粗问题?