J'ai un système de classement par étoiles Netflix/Amazon. Ainsi, les étoiles s'allument temporairement sur MouseOver et un clic est supposé déclencher un appel PHP et un changement permanent de la couleur des étoiles.Javascript: événement onClick nécessitant deux clics b/c du gestionnaire onMouseOver
Tout fonctionne, bien que l'événement onClick ne soit pas déclenché avant le deuxième clic. Il semble que cela soit dû au fait que l'événement onMouseOver est toujours activé jusqu'à ce qu'il rencontre une action de fin (onMouseOut ou un clic).
J'ai déjà vu des questions similaires, mais pas de réponses précises.
Merci!
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;
}
}
Et vous nous montrez votre code? – Cleiton
Essayé d'ajouter retour vrai. Je peux juste devoir séparer les fonctions (avoir une fonction manipulant trois événements, avec un commutateur les triant dehors). –