javascript 跳线 safari

javascript skipping lines safari

所以我遇到的问题只是间歇性地发生,并且 在 safari 中。

这在除 safari 之外的所有经过测试的浏览器中始终有效。在 safari 中,当我在代码中设置断点时,它一直有效,但当我没有设置断点时,每 10 次尝试中只有大约 1 次。

以下函数由单选按钮组的 onchange 调用。

function anl_tabs_submit() {
    document.getElementById("cssload-loader").style.opacity = 1;
    document.getElementById("anl_wholetable").style.opacity = 0.4;
    document.getElementById("anl_tab_form").submit();
    var radios = document.getElementsByName('tab');
    for (var i = 0; i< radios.length; i++){
        radios[i].disabled = true;
    }
}

被跳过的行是前 2 行:

document.getElementById("cssload-loader").style.opacity = 1;
document.getElementById("anl_wholetable").style.opacity = 0.4;

我在html,单选按钮组模拟标签。我想要的是,当用户单击一个选项卡时,选项卡中的内容变暗,并出现一个隐藏的奶嘴,然后提交该组所属的表单。

如果我在代码的不同位置放置警报,警报总是有效,但 2 个不透明度变化只是偶尔发生(在 safari 上)。

这是 Safari 浏览器的问题,还是我做错了什么?

提前致谢,

杰夫

好的,我解决了问题...终于!

在我到达提交行之前,Safari 上的 UI 没有更新。这是我修复它的方法(以防将来有人遇到同样的问题:

function anl_tabs_submit(frm) {
    document.getElementById("cssload-loader").style.opacity = 1;
    document.getElementById("anl_wholetable").style.opacity = 0.4;
    window.setTimeout(function(){
        document.getElementById(frm).submit();
        var radios = document.getElementsByName('tab');
        for (var i = 0; i< radios.length; i++){
            radios[i].disabled = true;
        }
    }, 0);

}

重要的是 window.setTimeout,它似乎让浏览器有时间更新 window,然后再继续 运行 脚本后半部分的说明。