jquery - 在表单提交上显示 div,适用于 Chrome、FFIE,但不适用于 Safari

标签 jquery forms safari

不知道该去哪里。

我有一个表单,提交后我想显示一条“正在处理,请稍候”消息。 (该表格有照片需要上传,因此可能需要一段时间)

我有以下 jQuery

$(document).ready(function() {
    $('#addnews').submit(function() {
        $('#loading').show();
    });
});

addnews 是我的表单 ID, 我的模板中的 div 是

<div id="loading">Please wait, your news is being submitted...
    <img src="/-/images/addwalk-loader.gif"/>
</div>

使用这个CSS

#loading{
    display:block;
    display: none;
    background:#399f8a;
    color:#FFFFFF;
    font-weight: bold;
    text-align: center;
    border-radius: 3px;
    -moz-border-radius: 3px;
    -webkit-border-radius: 3px;
    padding:10px;
    margin-top: 10px;
}

.loading img{
    float: right;
}

现在,当我在 FF(Mac)、Chrome(Mac&PC) 和 IE9 中点击“提交”时,此功能就可以工作了(虽然 gif 没有动画,但我知道这是一个单独的问题)

但它似乎不想在 Mac 上的 Safari 上运行。 有什么想法吗,如果我有什么东西可以阻止它?或者调试它的最佳方法是什么? 谢谢!

最佳答案

我遇到过非常类似的问题,在提交付款表单时,我们显示了一个加载弹出窗口,该弹出窗口覆盖了整个屏幕,以尝试阻止人们重新加载页面并重新提交(如果他们认为花费的时间太长)。然而在 Safari 中,加载程序似乎从未出现。

在观察控制台寻找线索后,我意识到所有 css 更改都在发生并应用到页面,但我根本没有看到这些反射(reflect)在屏幕上。

我得出的结论是,这是由于 safari 在页面加载期间处理内容渲染的方式造成的。一旦页面加载被触发(即从链接或表单提交),safari 就会停止对显示进行任何进一步的更改。

这意味着您需要在触发提交之前让加载动画就位。将这种想法应用到我自己的代码中解决了问题。

对你来说这意味着这样的事情......

$(document).ready(function() {
    $('#addnews').submit(function(e) {
        e.preventDefault();
        $('#loading').show();
        $(this).submit();
    });
});

然而,这引发了另一个问题,因为提交是触发事件,而我们想要触发的事件我们创建了一个无限循环,由于我们阻止了默认值,因此永远不会提交。

要解决此问题,您要么不需要触发提交中的所有内容,要么我们可以执行类似的操作...

$(document).ready(function() {
    $('#addnews').each(function(){
        this.preventNextSubmit = true;            
    }).submit(function(e) {
        if(this.preventNextSubmit == true){
            this.preventNextSubmit = false;
            e.preventDefault();
            $('#loading').show();
            $(this).submit();
        }
    });
});

此示例最初将 bool 值添加到设置为 true 的表单中。如果为真,它会抑制表单提交并显示动画,然后它会重置 bool 值并再次调用提交,现在将正常提交。

我希望这有帮助:)

关于jquery - 在表单提交上显示 div,适用于 Chrome、FFIE,但不适用于 Safari,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9934803/

相关文章:

javascript - Aloha 编辑器不适用于 Opera,有时也不适用于 Chrome

jquery - 将样式应用于 slider 外部的单独元素

php - 在表单中打印 JS 变量

Javascript 滚动不适用于 safari 但适用于 chrome 操作系统

javascript - 使用 jquery 查找和替换 html 中的元素

javascript - 使用javascript在屏幕中间显示弹出窗口

java - 无法获取使用 jQuery Popconfirm 插件单击的按钮的名称

javascript - 将鼠标悬停在复选框上时,为不同的 div 设置动画

javascript - Safari 浏览器 chop POST 参数

css - 带有 CSS 渐变的奇怪 Safari CSS 错误