2012-08-31 166 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'); 
相关问题