想写一个按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>
这个要怎么修改啊...
<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>
这个要怎么修改啊...
<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>
<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>