1

jQuery 1.7.2 で完全に動作する jQuery の星評価を取得しましたが、jQuery 1.8.0 を使用すると構文エラーが返されます。スクリプトは次のとおりです。

/* ====== STAR RATING ========= */
    jQuery(".stars.active a.star").hover(
        function(){
            var elemID = jQuery(this).parent('.stars').attr('id');
            elemID = elemID.replace('id-', '');

            if (od_readCookie('voted-'+elemID) == 'TRUE') {
                jQuery(this).siblings('.ty').html('You already voted.');
            } else {    

                var theClass = jQuery(this).attr('class');
                theClass = theClass.match(/^s[0-9]/);
                var starNum = theClass[0].replace('s', '');
                var allClasses = '';
                for(i=1;i<=starNum;i++) {
                    allClasses += ' .s'+i+', ';
                }
                jQuery(this).parent('.stars').children('.star').addClass('nogold');         
                jQuery(this).parent('.stars').children(allClasses).addClass('hover');
            }
        },
        function(){
            var elemID = jQuery(this).parent('.stars').attr('id');
            elemID = elemID.replace('id-', '');

            if (od_readCookie('voted-'+elemID) == 'TRUE') {
                jQuery(this).siblings('.ty').html('');
            } else {            
                jQuery(this).parent('.stars').children('.star').removeClass('nogold');                  
                jQuery(this).parent('.stars').children('.star').removeClass('hover');
            }
        }
    );

    // actually add the rating
    jQuery(".stars.active a.star").click(function(){
        var elemID = jQuery(this).parent('.stars').attr('id');
        elemID = elemID.replace('id-', ''); 

        if (od_readCookie('voted-'+elemID) != 'TRUE') {

            var theClass = jQuery(this).attr('class');
            theClass = theClass.match(/^s[0-9]/);
            var starNum = theClass[0].replace('s', '');


            // keep the marking while rating updating
            var allClasses = '';
            for(i=1;i<=starNum;i++) {
                allClasses += ' .s'+i+', ';
            }
            jQuery(this).parent('.stars').children('.star').addClass('nogold_voted');           
            jQuery(this).parent('.stars').children(allClasses).addClass('hover_voted');

            jQuery(this).siblings('.ty').load('/od/wp-admin/admin-ajax.php?action=od_add_vote&id='+elemID+'&rating='+starNum);
        }

    });

私はjQueryに精通していないので、誰かが少し光を当てることができますか?問題の原因は何ですか?

4

2 に答える 2

0

さて、私はそれを見つけたと思います。このコードは問題を引き起こしています:

var allClasses = '';
for(i=1;i<=starNum;i++) {
   allClasses += ' .s'+i+', ';
}
jQuery(this).parent('.stars').children('.star').addClass('nogold');         
jQuery(this).parent('.stars').children(allClasses).addClass('hover');

この

var allClasses = '';
for(i=1;i<=starNum;i++) {
    allClasses += ' .s'+i+', ';
}
jQuery(this).parent('.stars').children('.star').addClass('nogold_voted');           
jQuery(this).parent('.stars').children(allClasses).addClass('hover_voted');

どちらの場合もallClasses、変数の最後はコンマで終わるため、最終的なセレクターは.s0.s1,.s2,s3,s4,jQuery 1.7で受け入れられるもののようなものですが、1.8以降では機能しません。

したがって、解決策は、変数から最後のコンマを削除することです:allClasses = allClasses.slice(0, -1)各ループの後。

したがって、次のような結果になるはずです。

var allClasses = '';
for(i=1;i<=starNum;i++) {
   allClasses += ' .s'+i+', ';
}
allClasses = allClasses.slice(0, -1);

jQuery(this).parent('.stars').children('.star').addClass('nogold');         
jQuery(this).parent('.stars').children(allClasses).addClass('hover');

var allClasses = '';
for(i=1;i<=starNum;i++) {
    allClasses += ' .s'+i+', ';
}
allClasses = allClasses.slice(0, -1);

jQuery(this).parent('.stars').children('.star').addClass('nogold_voted');           
jQuery(this).parent('.stars').children(allClasses).addClass('hover_voted');
于 2012-08-31T08:38:55.503 に答える
0

すべてのスター要素にsクラスを追加することで、コードを簡素化し、セレクターの問題を回避できます。

次に、すべてを選択するのは簡単です:

 // keep the marking while rating updating
 jQuery(this).parent('.stars').children('.star').addClass('nogold_voted');           
 jQuery(this).parent('.stars').children('.s').addClass('hover_voted');
于 2012-09-06T12:43:04.770 に答える