2009-08-24 171 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

相關問題