我正在尝试显示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错误来指示问题。
我去了here并将其更改为我的代码(我硬编码is_expired为是),并且它在那里工作。
任何帮助都会很棒。感谢。
编辑:要清楚,我不是依赖W3school的例子来准确,我用他们的“试一试”页面来测试我自己的代码。我也在jfiddle上做了这个,它工作得很好。使用控制台检查函数返回“undefined”。
EDIT2:实际上,抓一点。当控制台中没有命令时,我不小心再次按回车。提示的实际输出是:
[12:07:55.940] [object Function]
答案 0 :(得分:3)
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
答案 1 :(得分:2)
在函数中声明变量时,请确保使用var
关键字,这样就不会破坏全局命名空间。听起来你在某个地方这样做:
function my_thing() {
var i = 0;
var j = 0;
prompt = "What the heck";
}
省略var
关键字将prompt
置于全局命名空间中,破坏默认的prompt
函数。
答案 2 :(得分:1)
根据建议,代码中的某些内容已使用window.prompt
覆盖了function prompt(s) { window.status = s }
方法。不确定这是否是故意的。
您可以使用一些方法“恢复”原始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?");
您可以delete window.prompt;
(或设置window.prompt = null;
),但这可能不适用于所有浏览器。
您可以创建iframe(创建新的window
环境),然后从那里“窃取”prompt
。
var i = document.createElement('iframe');
i.style.display = 'none';
document.body.appendChild(i);
window.prompt = i.contentWindow.prompt;