0

IE8 以下では動作しない次の 2 つのコードがあります。

services.each(function() {
    $(this).hover(function() {
        services.removeClass('active');
        $(this).addClass('active');                     
    });
});

4 つのサービスすべてに常にアクティブなクラスがあるため、これは失敗します。また、次のコードでは、コールバック関数は完成したクラスを追加しません。

webform.click(function() {                  
    if(!$(this).hasClass('expanded')) {
            $(this).addClass('expanded');
            $(this).animate({
                marginLeft: '-25%',
                width: "50%",
                minWidth: '400px',
                maxWidth: '700px',
                padding: '0',
                minHeight: "580px",
                height: 'auto',
                borderRadius: "0"
            }, 1000, function () {
                $(this).addClass('completed');
            });
        } 
    });

これらを修正する方法と、さらに重要なことに、コードが IE と互換性があることを確認するために将来何をすべきか教えてもらえますか。

参考までに、同様のjQuery/IEの問題を抱えている人のために、最後のオプションの後にコンマを配置することに大きな問題がありましborderRadius: "0"た。

4

1 に答える 1

1

Hover問題-

hover()は 2 つの引数を取ります。1 つは 用mouseenter、もう 1 つは 用mouseleaveです。引数として 1 つの関数のみを指定すると、両方のイベントに対して実行されます。

要素のコレクションに対してメソッドを実行する必要はありませんeach。jQuery は、コレクションのすべての要素を内部的にループします。

あなたのためにこれを試してくださいhover()

services.hover(function() { 
       /* add on mousenter, remove on mouseleave  */   
        $(this).toggleClass('active');                   

});

両方の引数を使用する代替アプローチ:

services.hover(function() { 
       /* add on mousenter */   
        $(this).addClass('active');                   

}, function(){
       /*remove on mouseleave */
       $(this).removeClass('active');  
});

API リファレンス: http://api.jquery.com/hover

于 2013-01-15T11:40:04.707 に答える