//局部变量,答题时间
var part_solve=0;
//局部变量,试题数量
var part_selectedSum=0;
//局部变量,已选题分
var part_score=0;
trid="";
tableNode="";
if(dataCount>0)
{

if(selectedSum>0)
{
//答题时间
part_solve=page_solve;
//试题数量
part_selectedSum=page_selectedSum;
//已选题分
part_score=page_score;

}
else{
//答题时间
part_solve=solve;
//试题数量
part_selectedSum=selectedSum;
//已选题分
part_score=score;

} }
else{
//答题时间
part_solve=0;
//试题数量
part_selectedSum=0;
//已选题分
part_score=0;
}
//拿到被选中的题
for(i=0;i<document.getElementsByName("questionChecked").length;i++)      
{      
//做判断,如果题被选中了,做出一系列赋值
if(document.getElementsByName("questionChecked")[i].checked)
{
part_solve =Number(part_solve)+Number(document.getElementsByName("solvetime")[i].innerHTML);
part_score=Number(part_score)+Number(document.getElementsByName("defaultscore")[i].innerHTML);
part_selectedSum=part_selectedSum+1;
//获取被选中节点
var checkboxNode=document.getElementsByName("questionChecked")[i];
//被选中节点的父节点 td
var tdNode=checkboxNode.parentNode; 
//td的父节点 rdid
         trid=tdNode.parentNode.id+"#"+trid;
         document.getElementById("allcheckQuestions").value=trid;
         //lastTrid=trid;
        var tridNode=tdNode.parentNode;
           tableNode=tridNode.parentNode.parentNode.id+"@"+trid;
          //字符串切割,数组接收
         var arryTable=tableNode.split("@");
          //判断题型,然后根据题型把题ID 赋给字符串
if(arryTable[0]=="tableQqq"){
 strQqType=arryTable[1];
}
if(arryTable[0]=="tableQdx"){
 strDxType=arryTable[1];
}
if(arryTable[0]=="tableQpd"){
 strPdType=arryTable[1];
}
}
}      

//然后给input赋值,显示一共多少题,总答题时间和总分数
document.getElementById("solveTime").value=part_solve;
document.getElementById("selectedQuestion").value=part_selectedSum;
document.getElementById("selectedScore").va lue=part_score;
solve=part_solve;
selectedSum=part_selectedSum;
score=part_score;
dataCount=1;
}
 先上的代码,前台功能是通过jq/ajax从数据库查出来一些数据,每条数据都根据回调函数append一个表格,每条记录后都有一个checkbox复选框,根据复选框勾选情况,在页面上方的input框内都有一些属性显示,比如:勾选两个,上面第一个input 数量显示2,第二个input显示2个数据其他的属性累加,此处定义很多全局变量以便于别的方法ajax传到后台,现在的问题就是,打比方我第一页勾选3个,然后翻页,我翻页是假翻页,每次都ajax后台查一遍。 到第二页的时候我勾选3个,现在input计数应该写的是6道题没错,可是我现在想回到第一页,我用js写的回到前一页上一页勾选的是默认选中,并且在多选一个,问题出现了,这回计数input显示的是10个,就是说回到第一页重复勾选也给算上了。javascriptjqueryajax

解决方案 »

  1.   

    改用存储数据行的id来计算总数,勾选一条 改用存储数据行的id来计算总数,勾选一条之前判断当前条的id是否存在于id集合中,存在就不继续添加这条id,获取总数就通过收集的id数量来得到就行了 ajax获取到的数据生成checkbox也可以通过对比存储的ids来实现勾选
    <input type="checkbox" onclick="doCheck(数据行的id,this)" />
    <script>    var ids = ',';//保证id前后有“,”,这样对于id为1或者11就可以进行indexOf判断了    function doCheck(id, o) {
            if (o.checked) {
                if (ids.indexOf(',' + id + ',') == -1)///勾选时判断是否存在过,这步可以省略掉,只要你初始化ajax返回的数据的勾选不出错就不用添加这句
                    ids += id + ',';
            }
            else ids = ids.replace(',' + id + ',', ',');
            alert(getTotal())
        }    function getTotal() {
            if (ids == ',') return 0;
            else ids.replace(/^,|,$/g, '').split(',').length;
        }
     </script>