2009-08-24 174 views
1

我有一个Netflix /亚马逊风格的星级评分系统。因此,星星暂时点亮了鼠标点击,并且点击应该触发PHP呼叫并且永久改变星星颜色。Javascript:onClick事件需要两次点击b/c onMouseOver处理程序

一切正常,虽然onClick事件不会触发,直到第二次点击。看起来这是因为onMouseOver事件仍处于激活状态,直到它遇到终止操作(onMouseOut或单击)。

我见过类似的问题,但没有on-point答案。

谢谢!

function rate(img_name,action,headlineid,userid,rating) { 
     var baseurl='http://www.mysite.com/images/'; 
    var imgoff='atcstar3.gif'; 
     var imghover='atcstar.gif'; 
     var imgon='atcstar.gif'; 
    imgname=img_name; 
     hid=headlineid; 
var current=document.getElementById(img_name).src; 
     var star=img_name.replace(hid+'-star',''); 


     switch (action) { 
       case 'hover': 
           for (i=1;i<=star;i++) { 
             document.getElementById(hid+'-star'+i).src=baseurl+imghover; 
           } 
         break; 

       case 'click': 
         if (current!=baseurl+imgon) { 
           for (i=1;i<=star;i++) { 
             document.getElementById(hid+'-star'+i).src=baseurl+imgon; 
           } 

           current=baseurl+imgon; 

           xmlHttp=GetXmlHttpObject() 
           if (xmlHttp==null) 
           { 
           alert ("Browser does not support HTTP Request") 
           return 
           } 

           if (getCookie("votes")=="") { 
            setCookie("votes",hid+'-'+star,3); 
           } else { 
             votes=getCookie("votes") 
             votes=votes+","+hid+'-'+star 
             setCookie("votes",votes,3); 
           } 


           var url="rate.php?"; 
           url=url+"headlineid="+hid; 
           url=url+"&userid="+userid; 
           url=url+"&rating="+star; 
           url=url+"&sid="+Math.random(); 
         xmlHttp.onreadystatechange=stateChangedRateStory; 
           xmlHttp.open("GET",url,true); 
           xmlHttp.send(null); 
         newrank=star; 




         } else { 
          document.getElementById(img_name).src=baseurl+imgoff; 
           current=baseurl+imgoff; 
         } 
         break; 
       case 'out': 

         if (current!=baseurl+imgon || (newrank!=star && rating<star)) { 
           for (i=5;i>=rating+1;i--) { 
             //document[hid+'-star'+i].src=baseurl+imgoff; 
             document.getElementById(hid+'-star'+i).src=baseurl+imgoff; 
           } 
         } 

         break; 
     } 
} 
+1

那你告诉我们你的代码呢? – Cleiton 2009-08-24 03:30:56

+0

尝试添加返回true。我可能只需要分开函数(有一个函数处理三个事件,并用一个开关排序)。 – 2009-08-24 03:39:28

回答

0

尝试让onMouseOver事件返回true。

1

无论何时我需要将鼠标移到显示上时,我通常更喜欢使用CSS元素:而不是鼠标悬停。

+0

就像我一样,但我控制着其他物体(低于被徘徊的星星)的外观,并且外观的变化是有条件的(不管投票是否是先前投射的)。我不认为我可以用CSS做到这一点。 – 2009-08-24 03:41:15

相关问题