0

我可能想对这个太花哨了。

我有一排类似收音机的按钮,它们之间有一个分隔线和背景图像。单击“按钮”之一时,我会更改其类别。分隔线的 CSS 键控到两侧按钮的类以选择背景图像。我正在使用 CSS 'sibling' 选择器来执行此操作。

我有与“按钮”相关的 jQuery .click 事件。他们做的第一件事是从另一个按钮中清除“选定”类并将其设置在单击的按钮上。

例如,如果 LEFT 按钮 class='selected' 而 RIGHT 按钮不是,则它们之间的分隔线将获得蓝色背景。单击 RIGHT 按钮,当 LEFT 按钮的类被清除时,它会得到 class='selected'。分隔线变为红色。

这适用于 IE、FF、Safari 等。但 IE 很奇怪(IE7) - 当我将鼠标移到我单击的按钮上时,它只会反映分隔线背景的变化!也就是说,在示例中,RIGHT 按钮获取 class='selected' 并在单击时立即更改。但是分隔线保持蓝色,直到我将鼠标移开按钮,然后它变成红色。

类本身正在发生变化,因此按钮的外观也会发生变化。只有附近的东西没有!?

它让我想起了我以前的 VB6 日子,那时您必须定期调用“DoEvents”来让 Windows 进行 UI 更改。IE这里有类似的东西吗?

4

2 回答 2

1

我不知道为什么这会有所帮助,但是将 .hide().show() 添加到包含更改类的内容的选择器中似乎可以使其更新。

于 2010-12-28T20:57:05.823 回答
1

我读过使用 setAttribute 更改类将强制 IE7 重新呈现样式。试试看,如果仍然失败,我通过重写 html 解决了类似的 IE7 问题,这迫使 IE7 重新渲染(使用 jquery):

if ($("html").hasClass("ie7")){
    var tempHolder = $("#ajaxresults").html();
    $("#ajaxresults").html(tempHolder);
}

至于为 html 或 body 标签赋予 ie7 类,我建议查看 html5boilerplate.com。如果由于某种原因您不能使用他们的解决方案,那么它的 jquery 是:

    if ($.browser.msie){
        if ($.browser.version < 8){
            $("html").addClass("ie ie7");
        }
        else {
            $("html").addClass("ie");
        }
    }
于 2010-12-29T04:22:20.103 回答