0

私はこれに夢中になりすぎているのかもしれません。

ラジオのようなボタンのペアが一列に並んでいて、その間に背景画像のある仕切りがあります。「ボタン」の 1 つがクリックされると、そのクラスを変更します。仕切りの CSS は、背景画像を選択するために両側のボタンのクラスに合わせられます。CSSの「兄弟」セレクターでこれを行っています。

「ボタン」に関連付けられた jQuery .click イベントがあります。彼らが最初に行うことは、他のボタンから「選択された」クラスをクリアし、クリックされたボタンに設定することです。

たとえば、左のボタンが class='selected' で、右のボタンが選択されていない場合、それらの間の仕切りは青色の背景になります。右ボタンをクリックすると、左ボタンのクラスがクリアされている間に class='selected' が取得されます。仕切りが赤くなります。

これは IE、FF、Safari などで動作しますが、IE は奇妙です (IE7) - クリックしたボタンからマウスを離したときにのみ、仕切りの背景の変更が反映されます。つまり、この例では、RIGHT ボタンは class='selected' を取得し、クリックするとすぐに変更されます。しかし、仕切りはボタンからマウスを離すまで青のままで、その後赤に変わります。

クラス自体が変更され、結果としてボタンの外観が変更されます。ないのは近隣のものだけ!?

Windows で UI を変更するには、定期的に「DoEvents」を呼び出す必要があった古い VB6 時代を思い出します。ここで IE に似たようなものはありますか?

4

2 に答える 2

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 に答える
1

これが役立つ理由はわかりませんが、クラスを変更したものを含むセレクターに .hide().show() を追加すると、それが更新されるようです。

于 2010-12-28T20:57:05.823 に答える