100分请高手帮我解决函数调用的问题

ljsbwcwt 2013-04-14 12:02:11
一、先帖代码
<div id="star">
<span>js星级评论打分</span>
<ul>
<li><a href="javascript:;">1</a></li>
<li><a href="javascript:;">2</a></li>
<li><a href="javascript:;">3</a></li>
<li><a href="javascript:;">4</a></li>
<li><a href="javascript:;">5</a></li>
</ul>
<span></span>
<p></p>
</div><!--star end-->

<script type="text/javascript"> 
window.onload = function (){
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>" + aMsg[this.index - 1].match(/\|(.+)/)[1]
};

//鼠标离开后恢复上次评分
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" : "";
}

};
</script>


二、截图看效果



三、需要实现功能如下
以上代码实现了如图的效果,但我现在需要对4行指标进行评分,而此处的id=star是写死了的,所以想请教高手们帮我解决,万分感谢!!!
...全文
125 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
未知数 2013-04-14
  • 打赏
  • 举报
回复
引用 1 楼 wzs_xyz 的回复:
这种问题自己改一下函数调用不就行了 JavaScript code?12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061<script type="text/javascript"> var onl……
第一句写错一点,更正为: var oStar = typeof obj=='object'?obj:document.getElementById(obj);
未知数 2013-04-14
  • 打赏
  • 举报
回复
这种问题自己改一下函数调用不就行了

<script type="text/javascript"> 
var onloadFun = function (obj){
    var oStar = typeof obj=='object'?obj:document.getElementById(id);
    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>" + aMsg[this.index - 1].match(/\|(.+)/)[1]
        };
         
        //鼠标离开后恢复上次评分
        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" : "";   
    }
     
};
window.onload = function(){
    var objs = ['star','start1','start2'];
    for(var i=0;i<objs.length;i++) {
       onloadFun(objs[i]); 
    }
    
}
</script>
ljsbwcwt 2013-04-14
  • 打赏
  • 举报
回复
呵呵,OK了,感谢!

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧