Javascript window.alert并确认工作,但不提示
我正试图显示一个Javascript提示,让用户输入数据(正如所使用的提示)。但是,它不会显示。window.alert显示,window.confirm也显示。但是,这并不及时。 下面是我试图运行的代码: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
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;
),但这可能不适用于所有浏览器窗口
环境),然后从那里“窃取”提示符
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;