为什么这个简单的"confirm" javascript 函数会出乎意料地表现



sysadmin和编码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的行为很奇怪,告诉我我正在做。

我的问题是,为什么脚本的行为不一致,我如何避免这种行为,以便在两个浏览器中都保持一致,并且不需要额外的警报()?

我认为问题可能是location在这种情况下等效于window.location。由于您没有使location成为本地变量,它将是隐含的全局。

将您的 location变量重命名为其他东西,或使用" var location"将其更改为本地变量:

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

最新更新