想写一个按shift多选checkbox的function,但是貌似在取chkbox的id的时候有点问题...<html> 
<body   onload= "initObjects()"> 
<table id="table_selectTestCase">
 <thead>
 <tr><th>(Un)Select All<input type="checkbox" id="selectall_chkbox" onclick="selectAll()"/></th>
 <th>No.</th><th>Name</th><th>Author</th><th>Description</th><th>Feature</th><th>Requirement</th><th>Customer</th><th>TL1 Present</th><th>
 <input type="button" value="Customize All" onclick="customizeall()"/>
 </th></tr>
 </thead>
 <tbody id="tbody_selectTestCase">
 </tbody>
</table>
<SCRIPT LANGUAGE= "JavaScript"> 
<!-- 
function initObjects()
{
  var oTable = document.getElementById("table_selectTestCase");
  var oldTBody=document.getElementById("tbody_selectTestCase");
  if (oldTBody!=null){
   oTable.removeChild(oldTBody);
  }
  var oTBody=document.createElement("tbody"); 
  oTBody.id="tbody_selectTestCase";
  oTable.appendChild(oTBody);
 
for(var   i=0;i <20;i++) 
{
 
   var chkbox=document.createElement("input");
   chkbox.type = "checkbox";
    chkbox.id = "chkbox"+i;
    chkbox.name = "chk";
    chkbox.onclick = "chkClk(this)";  
    
   oTBody.insertRow(i);
   oTBody.rows[i].id="testcaseRow"+i;
   
   oTBody.rows[i].insertCell(0);
    oTBody.rows[i].cells[0].appendChild(chkbox); 
   
}
}// 设定几个全局变量 
var isShiftKeyDown=false;//是否shift按下 
var lastClk=null;//最后点击的checkbox对象 
var lastCheck=false;//最后选择的checkbox的状态 
var isMultiSel = false;//是否处于多选状态 
var startIndex = -1;//记录上次多选状态起始index 
var endIndex = -1;//记录上次多选状态结束index 
function chkClk(chkObj){ var chks=document.getElementById('tbody_selectTestCase').getElementsByTagName( "chk"); 
if(isShiftKeyDown){ 
if(!lastClk) lastClk = chks[0]; 
if(isMultiSel) 
for(var i=startIndex;i <=endIndex;i++) 
chks[i].checked = !lastCheck; 
var startChk = lastClk; 
var endChk = chkObj; 
if(lastClk.sourceIndex > chkObj.sourceIndex){ 
var temp = startChk; 
startChk = endChk; 
endChk = temp; 

for(var i=0;i <chks.length;i++){ 
if(chks[i] == startChk) 
startIndex=i; 
if(chks[i] == endChk){ 
endIndex=i; 
break; 


for(var i=startIndex;i <=endIndex;i++) 
chks[i].checked = lastCheck; 
isMultiSel = true; 
}else{ 
lastClk = chkObj; 
isMultiSel = false; 

lastCheck = chkObj.checked; 

document.onkeydown=function(){ 
if(event.keyCode==16) 
isShiftKeyDown=true; 

document.onkeyup = function(){ 
if(event.keyCode==16) 
isShiftKeyDown=false; 

//--> 
</SCRIPT> 
</BODY> 
</html> 
 
这个要怎么修改啊...

解决方案 »

  1.   

    只做了正选,没做反选。提供个思路而已,仅供参考
    <html>  
    <body onload= "initObjects()">  
    <table id="table_selectTestCase">
     <thead>
     <tr><th>(Un)Select All<input type="checkbox" id="selectall_chkbox" onclick="selectAll()"/></th>
     <th>No.</th><th>Name</th><th>Author</th><th>Description</th><th>Feature</th><th>Requirement</th><th>Customer</th><th>TL1 Present</th><th>
     <input type="button" value="Customize All" onclick="customizeall()"/>
     </th></tr>
     </thead>
     <tbody id="tbody_selectTestCase">
     </tbody>
    </table>
    <SCRIPT LANGUAGE= "JavaScript">  
    <!--  
    function initObjects()
    {
      var oTable = document.getElementById("table_selectTestCase");
      var oldTBody=document.getElementById("tbody_selectTestCase");
      if (oldTBody!=null){
      oTable.removeChild(oldTBody);
      }
      var oTBody=document.createElement("tbody");  
      oTBody.id="tbody_selectTestCase";
      oTable.appendChild(oTBody);
     
    for(var i=0;i <20;i++)  
    {
      
      var chkbox=document.createElement("input");
      chkbox.type = "checkbox";
      chkbox.id = "chkbox"+i;
      chkbox.name = "chk";
      chkbox.onclick =function(){ chkClk(this);   }
        
      oTBody.insertRow(i);
      oTBody.rows[i].id="testcaseRow"+i;
        
      oTBody.rows[i].insertCell(0);
      oTBody.rows[i].cells[0].appendChild(chkbox);  
        
    }
    }var obj={startID:-1,endID:-1,bStartChk:false,down:false,totalnum:0};function chkClk(o){
      if (totalnum=0)  { startID=o.id; totalnum=1; return;}
      with(obj){
        if(!down){
          startID=o.id;
        } 
        else{
          endID=o.id;
          var t=getNum(endID)-getNum(startID);
          totalnum=t>0?t+1: -1*t+1;
          var i=t>0 ? getNum(startID) : getNum(endID);
          var n=t>0 ? totalnum+i  : i+totalnum-1
          for(i=i;i<n;i++){
            document.getElementById("chkbox"+i).checked=true;
          }
          startID=endID;
          totalnum=1;
        }
      }
    }document.onkeydown=function(e){
    e=e||window.event;
      if(e.keyCode==16)  {  obj.down=true;  }
    }  document.onkeyup = function(e){  
    e=e||window.event;
      if(e.keyCode==16){obj.down=false;  }  
    }function getNum(s){
      return s.replace("chkbox","")*1;alert(s.replace("chkbox","")*1)
    }
    </SCRIPT>  
    </BODY>  
    </html>  
      

  2.   

    <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
    <script>
    $(function(){
    // 生成checkbox
    var container = $("#container");
    for (var i = 0; i < 10; i++) {
    container.append("<input type='checkbox' value="+i+" />" + i + "<br />");
    }

    // 是否按住shift
    var isShift = false;
    $("body").bind("keydown", function(e){
    if (e.keyCode == 16) {
    isShift = true;
    }
    }).bind("keyup", function(e){
    isShift = false;
    });

    container.find("input:checkbox").click(function(){
    var cb = $(this);
    var isChecked = cb.prop("checked");
    if (!isShift) {
    $("#container input:checkbox").prop("checked", false);
    cb.prop("checked", isChecked);
    }
    });
    });
    </script>
    <body>
    按住shift可以多选:
    <div id="container"></div>
    </body>