Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 要解决的JavaScript难题:window.confirm=divConfirm(strMessage)_Asp.net_Javascript_Jquery_Ajax - Fatal编程技术网

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

Asp.net 要解决的JavaScript难题:window.confirm=divConfirm(strMessage),asp.net,javascript,jquery,ajax,Asp.net,Javascript,Jquery,Ajax,场景是:已经编写了很多JS代码的旧站点。如果用户希望将所有警报消息更改为基于新时代jazzy Div的警报,这在使用JQuery、YUI、Prototype时非常常见。。。等等 主要有树JS对话框 1.警觉的 要改变这一点很简单,我们只需编写新函数,显示div弹出窗口并显示消息,然后覆盖窗口。alert 函数showDivAlert(strMessage){ //div弹出逻辑和代码 } window.alert=showDivAlert 二,。提示 这看起来也很容易编写函数来接受字符串

场景是:已经编写了很多JS代码的旧站点。如果用户希望将所有警报消息更改为基于新时代jazzy Div的警报,这在使用JQuery、YUI、Prototype时非常常见。。。等等
主要有树JS对话框
1.警觉的 要改变这一点很简单,我们只需编写新函数,显示div弹出窗口并显示消息,然后覆盖窗口。alert


函数showDivAlert(strMessage){
//div弹出逻辑和代码
}

window.alert=showDivAlert

二,。提示

这看起来也很容易编写函数来接受字符串并显示输入值的文本框。现在,由于返回操作是基于点击“确定”按钮,这里的生活很简单



函数shoDivPromp(strMessage){
//弹出div以显示文本框并接受用户的输入
}
window.prompt=shoDivPromp

三,。证实

现在,上述两个对话框很容易覆盖和修改默认对话框,但确认对话框存在复杂性。
但是,默认的JS确认对话框会停止JS执行,当用户单击OK或Cancel时,会通过确定返回值(true/false)恢复执行。但是,如果我们使用用户div弹出窗口,则执行不会停止,这是一个问题。
我们仍然可以实现确认,但在这种情况下,我们必须为OK和CANCEL case绑定方法,该方法将附加到OK和CANCEL按钮。使用此函数,签名将类似于。
函数newConfirm(msg,fun-OkAction(),fun-CancelAction)


现在的问题是,这不能帮助我改变整个站点的确认对话框,就像我们在alert()中所做的那样; 问题

我不确定这是否可能实现,但我认为可以使用一些JS模式。如果可能的话,请告诉我。

函数签名将是:

 function newConfirm(msg, okAction, cancelAction);
并将用作:

 function newConfirm(msg, okAction, cancelAction){
   var ok = doWhateverPromptIsNecessary();
   if (ok) {
     okAction();
   } else {
     cancelAction();
   }
 }

也就是说,要将函数“指针”作为参数传递给函数,只需传入函数名而不使用()。函数签名是相同的。

所有3个方法实际上都停止了js执行,而不仅仅是确认,因为它们都是模态对话框。就我个人而言,我会尽可能使所有内容保持异步,因为模态对话框会阻止与当前文档的交互

您最好按照自己的建议使用新确认弹出窗口中的回调函数

我很难准确地理解你想要实现的目标。听起来您希望执行以下操作:

  • 运行一些javascript代码
  • 显示“确认”框
  • 等待,直到单击“确定”按钮或“取消”按钮
  • 当用户单击“确定”时继续代码,当用户单击“取消”时返回

您希望这样做的原因是,使用使用回调函数重写函数需要重写使用confirm函数的每一段代码。如果您需要我的建议,我会继续重写代码,使其异步执行。如果不锁定包含对话框的“确定”和“取消”操作的文档,则无法延迟脚本执行。

如果更改了角色,请发出警报/提示/确认。减慢执行挂起的用户交互以运行以下代码

重写这些函数后,代码将继续执行

要实现这一点,您必须修改代码的每个部分,并像使用异步函数一样工作

然后,您可以使用windows as的任何插件,并覆盖警报/提示/确认

现在的问题是,这不能帮助我改变整个站点的确认对话框,就像我们在alert()中所做的那样

没错。不可能在本机JavaScript中重现警报/确认/提示函数的同步性质。有一种非标准的方法
showmodaldialdialog
,它可以使用单独的弹出文档来实现,但并非所有浏览器都支持这种方法,而且通常认为这种方法非常不可取

因此,插件替换策略不起作用。您必须更改脚本其余部分中调用这些方法的每个位置

通常的模式是使用内联匿名函数,使用闭包保留局部变量,例如替换:

function buttonclick() {
    var id= this.id;
    if (confirm('Are you sure you want to frob '+id+'?'))
        frob(id);
    wipe(id);
}
与:

如果需要保留
,则需要查看进一步的嵌套闭包或function.bind。如果在循环中调用
确认
,事情会变得相当困难


显然,您还必须确保在“确认”框打开时,关键全局状态不会改变。通常情况下,通过用覆盖层覆盖页面的其余部分以防止点击通过,可以将这种风险降至最低。但是,如果您有超时,他们仍然可以开火。

我不明白如何解决“提示”而不是“确认”。如何获得提示调用的输入值?我想你是对的,我没有抓住要点,提示对话框也存在确认同步的问题。。。。。。很抱歉,我在思考时错过了这个。是的,你是对的,但我正在寻找一些可以在功能体内部实现这一点的神奇图案。这只能帮助我覆盖window.confirm=confirm(str)对话框。上面唯一的问题是,我必须更改代码中已经使用的所有confim的调用。不幸的是,正如其他人所指出的那样,这是不可能的。+1,我认为更新像这样的旧站点的一部分是删除模式框的同步性,并尽可能多地异步工作。没有人喜欢网页上的模式弹出窗口。
function buttonclick() {
    var id= this.id;
    myConfirm('Are you sure you want to frob '+id+'?', function(confirmed) {
        if (confirmed)
            frob(id);
        wipe(id);
    });
}