IE9提交时间CSS重绘

时间:2011-05-10 20:32:24

标签: jquery forms submit internet-explorer-9 background-image

我们有一个动画微调器gif,用于在用户提交表单后为提交按钮增添趣味。如果所有验证都在表单上传递,我们通过jQuery的css()方法分配背景,将背景图像,定位和颜色设置为一体。

IE9没有在提交时显示背景图片,但在其他浏览器中仍然可以看到。

这种技术在以前的IE浏览器中运行良好,但在IE9中似乎已经破解,包括旧的“浏览器模式”。我不确定这是否是IE9中的一个错误,但它确实改变了行为,我不能相信IE7 / 8模式的行为与预期一致。

似乎IE可能决定在用户​​提交表单后不再进行重新绘制。如果是这种情况,我不确定我是否已经解决了这个问题,但我想我认为情况并非如此。我们在Firefox中遇到了此技术的先前问题,我们发现Firefox除了表单请求本身之外还会停止所有http请求,这意味着如果背景图像不在缓存中,它将无法工作。因此,我们已经在内存中的Image对象上预加载微调器。

有趣的是,如果我从IE开发工具控制台手动调用更新按钮上的CSS的方法,它可以正常工作。只有当我们有一个实际的提交时,它才会被固定并且无法在微调器中绘制。同样有趣的是, 从提交按钮中删除文本,这是效果的第二部分。

任何人都有任何关于导致这种情况/如何预防的想法?

以下是处理提交的live()代码的精简版:

jQuery.fn.disableSubmit = function() {
    this.find("input[type=submit]").each(function() {
        $(this).css({"background": "url(/asdasdasd.gif) no-repeat 50% 50%"});
    });
    return this;
};

$("form").live("submit", function() {
    var form = $(this);

    form.disableSubmit();
    return true;
});

1 个答案:

答案 0 :(得分:0)

我在ExtJS上遇到了类似的问题,并且在提交表单后发现了你发现IE9没有加载任何新图像的确切内容。

这是我的解决方法,不需要预加载,但不可否认它有点hackish。

function() {    
    Ext.MessageBox.wait('Searching for tenants eligible for rent increase...', 'Searching');
    setTimeout(function() { document.getElementById('rental_increase_form').submit(); }, 200);
    return false;
}

基本上我在表单提交事件触发时返回false,我执行所有CSS加载,然后在超过200毫秒后通过Javascript手动提交表单。

我希望有所帮助。你有没有向微软提交错误?