2012-08-31 162 views
1

我有一個jQuery星級評定,它與jQuery 1.7.2完美配合,但在使用jQuery 1.8.0時返回語法錯誤。這裏的腳本:jQuery 1.8.0-min語法錯誤,無法識別的表達式

/* ====== 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,所以任何人都可以擺脫有點輕的和到底是什麼原因造成的問題?

+1

什麼是錯誤訊息?它發生在哪一行?你的控制檯通常會告訴你這些事情。 – nbrooks

+0

如何發佈從控制檯獲得的錯誤? – adeneo

+0

控制檯報告的錯誤究竟是什麼? – fcalderan

回答

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'); 
0

Several of the things removed in 1.8 were undocumented internals that some people have cleverly reverse engineered, but it’s always risky to use undocumented features.

Read the changelog BEFORE you implement the newest jquery

+0

錯誤消息是語法錯誤,無法識別的表達式:.s1 .s2 .s3 .s4 .s5(我個人星級的跨度類)。錯誤來自實際的jquery-min文件的第二行,而不是我的腳本。 – Ian

+0

你可以'console.log(allClasses);'爲我嗎? –

0

您可以簡化您的代碼,並通過添加小號類所有你星星避免選擇問題元素。

然後,它會很容易選擇所有:

// keep the marking while rating updating 
jQuery(this).parent('.stars').children('.star').addClass('nogold_voted');   
jQuery(this).parent('.stars').children('.s').addClass('hover_voted'); 
相關問題