Javascript window.alert并确认工作,但不提示

Javascript window.alert并确认工作,但不提示,javascript,Javascript,我正试图显示一个Javascript提示,让用户输入数据(正如所使用的提示)。但是,它不会显示。window.alert显示,window.confirm也显示。但是,这并不及时。 下面是我试图运行的代码: var is_expired = document.getElementById("is_expired").value; if (is_expired == "yes") { alert(is_expired); var answer = promp

我正试图显示一个Javascript提示,让用户输入数据(正如所使用的提示)。但是,它不会显示。window.alert显示,window.confirm也显示。但是,这并不及时。 下面是我试图运行的代码:

var is_expired = document.getElementById("is_expired").value;
    if (is_expired == "yes") {
        alert(is_expired);
        var answer = prompt("Are you sure you?");
        alert(answer);
    }
运行时,将输入if语句。第一个警报按其应显示“是”。但是,它跳过了提示行。下一个警报显示为“未定义”

现在,如果我唯一更改的是关键字提示符,它将正常工作,如下所示:

var is_expired = document.getElementById("is_expired").value;
    if (is_expired == "yes") {
        alert(is_expired);
        var answer = confirm("Are you sure you?");
        alert(answer);
    }
当我运行此操作时,会出现确认框。如果单击“确定”,则下一个警报显示“真”,如果单击“取消”,则警报显示“假”

因此,这里最大的收获是没有导致Javascript停止的语法错误。它实际上跳过了这一行并继续执行。那条线怎么了?我检查了多个网站,以确保它是正确的。 添加第二个“default”参数也没有帮助。我试过了。此外,没有Javascript错误指示问题

我去把它改成了我的代码(我硬编码的是“是”),它在那里工作

任何帮助都会很棒。谢谢

编辑:要清楚,我并不依赖W3school的例子来准确,我使用了他们的“试用”页面来测试我自己的代码。我也在jfiddle上做了这个,效果很好。使用控制台检查函数返回“未定义”

EDIT2:事实上,把它擦掉。当控制台中没有命令时,我意外地再次按下enter键。prompt的实际输出为:

[12:07:55.940] [object Function]

在函数中声明变量时,请确保使用
var
关键字,这样它就不会破坏全局命名空间。听起来你好像在某处这样做:

function my_thing() {
    var i = 0;
    var j = 0;
    prompt = "What the heck";
}

省略
var
关键字会将
prompt
放在全局命名空间中,并关闭默认的
prompt
函数。

prompt
应该在每个浏览器中都能正常工作。一种可能性是检查您是否在源代码中的某个地方意外重写了此函数。如果您在站点上的browserconsole中键入
prompt
,则应说明如下内容:

> prompt
function prompt() { [native code] }

// or put in your code:
alert(window.promt);
否则它会以某种方式被覆盖(很可能是因为忘记了
var
关键字):


正如所建议的,代码中的某些内容已使用
函数提示符{window.status=s}
覆盖了
window.prompt
方法。不确定这是否是故意的

有几种方法可用于“还原”原始的
提示符

  • 您可以在页面的最开始处备份原始文件:

    var originalPrompt = window.prompt;
    // Whatever code is on your page
    function prompt(s) { window.status = s }
    
    然后改用
    originalPrompt

    var answer = originalPrompt("Are you sure you?");
    
  • 您可以
    删除window.prompt
    (或设置
    window.prompt=null;
    ),但这可能不适用于所有浏览器

  • 您可以创建一个iframe(它创建一个新的
    窗口
    环境),然后从那里“窃取”
    提示符

    var i = document.createElement('iframe');
    i.style.display = 'none';
    document.body.appendChild(i);
    window.prompt = i.contentWindow.prompt;
    

  • 在这里工作很好:。你用的是什么浏览器?你能在JSFIDLE上重现这个问题吗?页面上还有什么其他JavaScript?您是否有任何库可能会覆盖
    窗口.prompt
    方法?
    console.log(window.prompt)
    显示什么?控制台中有任何警告吗?console.log(window.prompt)@tryingtogetprogrammingdirect:他只是在用他们的例子,而且他可能不知道。这不值得得-1。@Troncoso:有几件事你可以试试<代码>删除窗口.prompt应删除该重写并替换原始方法。如果没有,您可以尝试从iframe中“窃取”它。查看此答案了解更多信息:(只需将
    控制台
    替换为
    提示符
    ):)根据他的问题,它似乎被一个函数覆盖,否则第二个警报不会弹出,而是抛出一个TypeError。@Christoph:尽管可能是出于同样的原因。假设他做了
    functionprompt(){}
    prompt=function(){}
    
    var i = document.createElement('iframe');
    i.style.display = 'none';
    document.body.appendChild(i);
    window.prompt = i.contentWindow.prompt;