繁体   English   中英

为什么这个简单的“确认”javascript函数出乎意料地表现出来

[英]Why does this simple “confirm” javascript function behave unexpectedly

系统管理员和编码ignoramus试图创建一个简单的工作页面。 它有一个简单的javascript函数:

function run(job){
    var ok = confirm("Are you sure?");
    if(ok == true){
        location = 'job.php?op=' + job;
        window.location.href = location;
    } else {
        window.location.reload();
    }
}

通过一个简单的按钮调用:

<button style="color: red" onclick="run('test1');">Test1</button>

这里的关键字很简单,就像我的理解一样。

这在Chrome中有效,但该按钮在Firefox中无效(两种浏览器的当前版本)。

在尝试调试脚本时,我在.href之前添加了一个简单的警报行,因此脚本如下所示:

function run(job){
    var ok = confirm("Are you sure?");
    if(ok == true){
        location = 'job.php?op=' + job;
        alert(location);
        window.location.href = location;
    } else {
        window.location.reload();
    }
}

...然后该脚本也在Firefox中运行。 我可以看到警报短暂出现但它立即重定向并在几分之一秒内消失。 但是在Chrome中,弹出窗口仍然存在,因此它不是一个好的解决方法,而且Firefox中的行为很奇怪,它告诉我,我在做错了。

我的问题是,为什么脚本行为不一致,我怎样才能避免这种行为,因此它在两个浏览器中都是一致的,并且不需要额外的alert()?

我认为问题可能是该location等同于该上下文中的window.location 由于您没有将location为局部变量,因此它将是隐含的全局变量。

将您的location变量重命名为其他变量或使用“var location”将其更改为局部变量:

    var location = 'job.php?op=' + job;
    alert(location);
    window.location.href = location;

暂无
暂无

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

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