星级评分如何实现多行
网上的效果只有一行,我写了一个方法传值给xingxing1有了4行的效果,但是鼠标离开后恢复上次评分时却总是回复的上一行的评分,为什么呢
// js星级评分特效************
function xingxing(){
var aAll = document.getElementById("xingxing").getElementsByTagName("div"); // 获取对象下面所有的div节点
var oStar=null;
for ( var j= 0; j< aAll.length; j++) {
oStar = aAll[j];
xingxing1(oStar);
}
}
function xingxing1(oStar) {
goTopEx();
// getFenLei();
//var oStar=document.getElementById("star");
var aLi = oStar.getElementsByTagName("li");
var oUl = oStar.getElementsByTagName("ul")[0];
var oSpan = oStar.getElementsByTagName("span")[1];
var oP = oStar.getElementsByTagName("p")[0];
var i = iScore = iStar = 0;
var aMsg = [ "很不好", "不好", "一般", "好", "非常好" ]
for (i = 1; i <= aLi.length; i++) {
aLi[i - 1].index = i;
// 鼠标移过显示分数
aLi[i - 1].onmouseover = function() {
fnPoint(this.index);
// 浮动层显示
oP.style.display = "block";
// 计算浮动层位置
oP.style.left = oUl.offsetLeft + this.index * this.offsetWidth
- 104 + "px";
// 匹配浮动层文字内容
oP.innerHTML = "<em><b>" + this.index + "</b> 分 "
+ aMsg[this.index - 1].match(/(.+)/)[1] + "</em>";
};
// 鼠标离开后恢复上次评分
aLi[i - 1].onmouseout = function() {
fnPoint();
// 关闭浮动层
oP.style.display = "none";
};
// 点击后进行评分处理
aLi[i - 1].onclick = function() {
iStar = this.index;
oP.style.display = "none";
oSpan.innerHTML = "<strong>" + (this.index) + " 分</strong> ("
+ aMsg[this.index - 1].match(/(.+)/)[1] + ")";
}
}
// 评分处理
function fnPoint(iArg) {
// 分数赋值
iScore = iArg || iStar;
for (i = 0; i < aLi.length; i++){
aLi[i].className = i < iScore ? "on" : "";
}
}
}
// js星级评分特效end************