繁体   English   中英

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

[英]window.alert and confirm work, but not prompt

我正在尝试显示一个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);
    }

运行时,会出现确认框。 如果我单击“确定”,则下一个警报显示“true”,如果单击“取消”,则警告显示“false”。

因此,最重要的是,没有语法错误导致Javascript停止。 它实际上正在跳过这一行并继续执行。 这条线有什么问题? 我检查了多个网站以确保它是正确的。 添加第二个“默认”参数也无济于事。 我试过了。 此外,没有Javascript错误来指示问题。

我去了这里并将其更改为我的代码(我硬编码is_expired为是),它在那里工作。

任何帮助都会很棒。 谢谢。

编辑:要明确,我不是依靠W3school的例子来准确,我用他们的“试一试”页面来测试我自己的代码。 我也在jfiddle上做了这个,它工作得很好。 使用控制台检查函数返回“undefined”。

EDIT2:实际上,刮擦那个。 当控制台中没有命令时,我不小心再次按回车。 提示的实际输出是:

[12:07:55.940] [object Function]

prompt应该在每个浏览器中都有效。 一种可能性是检查您是否在源中的某处无意中覆盖了此功能。 如果您在站点上键入浏览器控制台中的prompt ,则应说明以下内容:

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

// or put in your code:
alert(window.promt);

否则它会以某种方式被覆盖(最有可能是忘记了var关键字):

> prompt = function(){alert("foo!")}
> prompt
function (){alert("foo")}

// calling prompt() would now pop an alert box

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

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

省略var关键字将prompt放在全局命名空间中,破坏默认prompt函数。

正如所建议的那样,代码中的某些内容已经使用function prompt(s) { window.status = s }覆盖了window.prompt方法。 不确定这是否是故意的。

您可以使用一些方法来“恢复”原始prompt

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

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

    然后使用originalPrompt代替:

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

  3. 您可以创建一个iframe(创建一个新的window环境),然后从那里“窃取” prompt

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM