我有一个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;
}
}
那你告诉我们你的代码呢? – Cleiton 2009-08-24 03:30:56
尝试添加返回true。我可能只需要分开函数(有一个函数处理三个事件,并用一个开关排序)。 – 2009-08-24 03:39:28