JS 勾选框,判断按shift多选时,性能问题???
页面有个列是勾选框,当我按下shift多选时,要取值,通过for循环循环所有的数据,判断如果checked是true,就取现在问题来了,一但页面数据过多,但勾选时,一循环就慢了,请问这个问题该怎么解决???谢谢!!!
页面有个列是勾选框,当我按下shift多选时,要取值,通过for循环循环所有的数据,判断如果checked是true,就取现在问题来了,一但页面数据过多,但勾选时,一循环就慢了,请问这个问题该怎么解决???谢谢!!!
解决方案 »
- JavaScript支付宝集成
- 程序运行有问题
- 【css样式】用javascript写个简单下拉菜单,css出现个小问题。
- 有没有知道在写web中如何使用radio
- 求助 a hover当鼠标放上去时能延时2两秒响应!
- 如何在点击一个超链接后直接弹出选择文件的对话框?
- 请教js中for in 的使用方法
- 我是个才开始雪编程的一个初学者!`为什么JAVA装在机子上运行不起???
- 在模态对话框 showModalDialog 的里面 能不能写一个form 表单,然后在提交?
- charAt()可以用在服务器端脚本中吗?
- 这是禁用google跳转统计的代码,可否再改一下把google搜索的https改为http?
- 请问JS可以控制麦克风吗?
2. 慢, 可能是因为你没有指定范围, 如果搜索的范围是整个页面, 而且页面内容很多, 当然会慢下耿。 你指定范围不就得了。<!DOCTYPE html>
<html>
<head>
<title></title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
function deleteMultiObjs(){
//只在table1这个范围中选择checkbox, 速度很快的。
var chks = $("#table1 :checkbox:checked");
if(chks.length==0){
alert("没有选中任何记录");
return;
}
if(!confirm("您确认要删除这些记录吗?")){
return;
}
//这里只作页面上的删除,如果要关联到后台请另写代码。
chks.parents("tr").remove();
}
</script>
</head>
<body>
<input type="button" value="删除" onclick="deleteMultiObjs()" />
<table id="table1" >
<tr><td><input type="checkbox" value="id001" /></td><td>广州</td></tr>
<tr><td><input type="checkbox" value="id002" /></td><td>东莞</td></tr>
<tr><td><input type="checkbox" value="id003" /></td><td>深圳</td></tr>
</table>
</body>
</html>
单独选择是不用按shift,但你要一下选多条时就要按shift键啦
那我如何取选中的这行其他列的数据呢???
没接触过jquery,惭愧!!!
<html>
<head>
<title></title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
function deleteMultiObjs(){
var chks = $("#table1 :checkbox:checked");
if(chks.length==0){
alert("没有选中任何记录");
return;
}
// if(!confirm("您确认要删除这些记录吗?")){
// return;
// }
//这里只作页面上的删除,如果要关联到后台请另写代码。
//chks.parents("tr").remove();
//1. 得到所有的相关id. (其实真正应用,绝大部分是取checkbox的id就够了的。)
var idArr=[];
chks.each(function(){
idArr.push($(this).val());
});
//2. 得到所有的地名
var addressArr=[];
//遍历所有选中checkbox的父级元素tr
chks.parents("tr").each(function(){
//tr的第2个子元素的文本
var addr = $(this).children(":eq(1)").text();
addressArr.push(addr);
});
//所有checkbox选中行的地名
$("#divResult").empty();
for(var i=addressArr.length-1;i>=0;i--){
$("#divResult").append(addressArr[i]+"<br/>");
}
}
</script>
</head>
<body>
<input type="button" value="测试" onclick="deleteMultiObjs()" />
<table id="table1" >
<tr><td><input type="checkbox" value="id001" /></td><td>广州</td></tr>
<tr><td><input type="checkbox" value="id002" /></td><td>东莞</td></tr>
<tr><td><input type="checkbox" value="id003" /></td><td>深圳</td></tr>
</table>
<div id="divResult" ></div>
</body>
</html>
改成:
$("#divResult").append(addressArr[i]+"<br/>");
这种是一个页面有多个checkbox的吧???我的是有一个表单,有一列是勾选框,请问怎么取勾选的那行行号呢???
<html>
<head>
<title></title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
function chkAll(obj){
$("#table1 tbody :checkbox").prop("checked",$(obj).is(":checked"));
} function test(){
var chks = $("#table1 tbody :checkbox:checked");
if(chks.length==0){
alert("没有选中任何记录");
return;
}
chks.parents("tr").each(function(){
var idx = $(this).index();
var address = $(this).find("td:eq(1)").text();
alert("选中的行号:"+idx+", 地名:"+address);
});
}
</script>
</head>
<body><input type="button" value="测试" onclick="test()" />
<table id="table1" cellpadding="1" cellspacing="1" border="1" >
<thead>
<tr><td><input type="checkbox" onclick="chkAll(this)" /></td><td>地名</td><td>总产值(亿)</td></tr>
</thead>
<tbody>
<tr><td><input type="checkbox" value="id001" /></td><td>广州</td><td>500</td></tr>
<tr><td><input type="checkbox" value="id002" /></td><td>东莞</td><td>300</td></tr>
<tr><td><input type="checkbox" value="id003" /></td><td>深圳</td><td>400</td></tr>
</tbody>
</table></body>
</html>
再给你一段纯 js 写的吧。
<!DOCTYPE html>
<html>
<head>
<title></title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
function chkAll(obj){
var chks = document.getElementById("tbody1").getElementsByTagName("input");
for(var i=0;i<chks.length;i++){
chks[i].checked = obj.checked;
}
} function test(){
var chks = document.getElementById("tbody1").getElementsByTagName("input");
var arr = [];
for(var i=0;i<chks.length;i++){
if(!chks[i].checked){
continue;
}
var obj = {};
obj.rowIndex = i;
obj.address = chks[i].parentNode.parentNode.childNodes[1].innerHTML;
arr.push(obj);
}
for(var i=0;i<arr.length;i++){
alert("选中行号:"+arr[i].rowIndex+", 地址:"+arr[i].address);
}
}
</script>
</head>
<body><input type="button" value="测试" onclick="test()" />
<table id="table1" cellpadding="1" cellspacing="1" border="1" >
<thead>
<tr><td><input type="checkbox" onclick="chkAll(this)" /></td><td>地名</td><td>总产值(亿)</td></tr>
</thead>
<tbody id="tbody1" >
<tr><td><input type="checkbox" value="id001" /></td><td>广州</td><td>500</td></tr>
<tr><td><input type="checkbox" value="id002" /></td><td>东莞</td><td>300</td></tr>
<tr><td><input type="checkbox" value="id003" /></td><td>深圳</td><td>400</td></tr>
</tbody>
</table></body>
</html>
例如
$("input:[name='KeyAttribute']:checked").each(function(){
这样来做相对来说循环的元素和次数要少点
});
第二:实现关键是判断shift有没有按下。
前面http://bbs.csdn.net/topics/390215967我们有讨论过类似的问题,你试着修改一下。不行再找我们。