JQuery 或者说js 事件绑定的问题

cstester 2011-10-17 12:46:02
当点 button 提交的时候,执行批量删除操作,首先看看Gridview中是否有Checkbox被选中,若没有,则提示选择:
我在$(document).ready 中声明了如下方法:

$("#<%=btnDelete.ClientID %>").click(function(){
if($("#<%=GridView1.ClientID %> tr input:checkbox[checked="+true+"]").filter(":not([name*=cheSelectAll])").length==0)
{
alert("请至少选择一项。");
return false;
}
else
{
return confirm("确定删除选中项目么?");
}
});


这段代码是可用的。但是我想实现把这些内容提取出来,提取到一个js文件中,代码是这样写的:


function checkSelectItem(button,list)
{
button.bind("click",function(){
if(list.length==0)
{
alert("请至少选择一项。");
return false;
}
else
{
return confirm("确定删除选中项目么?");
}
});
}



然后这样调用:

checkSelectItem($("#<%=btnDelete.ClientID %>"),$("#<%=GridView1.ClientID %> tr input:checkbox[checked="+true+"]").filter(":not([name*=cheSelectAll])").);

可是为什么得到的length 都是0, 但是在当前页面中的那段js代码就好用。求高人指点 ???
...全文
103 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
md5e 2011-10-17
  • 打赏
  • 举报
回复
<select id="dw_Action" name="dw_Action" onchange="actionChange();">
<option selected="selected" value="">=请选择一个命令=</option>
<option value="check">显示</option>
<option value="uncheck">取消显示</option>
<option value="top">热门</option>
<option value="untop">取消热门</option>
<option value="del">删除</option>
</select>

<asp:Button id="btn_Ok" runat="server" Text="执行命令" Width="84px" OnClientClick="return doExecute();" OnClick="btn_Ok_Click"></asp:Button>

<script type="text/javascript" >
var $ = function (objId) {
return document.all ? document.all[objId] : document.getElementById(objId);
}
function CheckAll(form) {
for (var i = 0; i < form.elements.length; i++) {
var e = form.elements[i];
if (e.name != 'chkall')
e.checked = form.chkall.checked;
}
}
function doExecute() {
if ($("dw_Action").value == "") {
alert("请选择一个命令再执行!");
return false;
}
if (checkckb() == false) {
alert("没有选择任何记录!");
return false;
}
if ($("dw_Action").value == "tozhuanti" && $("dwSpecialTopic").value == "0") {
alert("请选择一个专题!");
$("dwSpecialTopic").focus();
return false;
}
return true;
}
function checkckb() {
var temp = $("id");
if (temp == null) { return false; }
if (temp.checked) { return true; }
for (var i = 0; i < temp.length; i++) {
if (temp[i].checked) {
return true;
}
}
return false;
}
function actionChange() {
if ($("dw_Action").value == "tozhuanti") {
$("dw_zhuanti").style.display = "block";
}
else {
$("dw_zhuanti").style.display = "none";
}

}
</script>
cstester 2011-10-17
  • 打赏
  • 举报
回复
补充下:

filter(":not([name*=cheSelectAll])")

cheSelectAll 是列头的Checkbox

效果图如下:
风骑士之怒 2011-10-17
  • 打赏
  • 举报
回复
额,一步注意,竟然是说这个,你Checkbox选择改变后,Click事件里没有重新去遍历checkbox获取新值。。


改为:


<script>
function checkSelectItem(button) {
button.bind("click", function () {
var list = $("#<%=GridView1.ClientID %> tr input:checkbox[checked=" + true + "]").filter(":not([name*=cheSelectAll])");
if (list.length == 0) {
alert("请至少选择一项。");
return false;
}
else {
return confirm("确定删除选中项目么?");
}
});
}
checkSelectItem($("#<%=btnDelete.ClientID %>"));
</script>
风骑士之怒 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cstester 的回复:]
引用 2 楼 wknight_it 的回复:
checkSelectItem($("#<%=btnDelete.ClientID %>"), $("#<%=GridView1.ClientID %> tr input:checkbox[checked="+true+"]").filter(":not([name*=cheSelectAll])"));

试试


和后面的过滤器没啥大关……
[/Quote]

我看见你多了一个点,不知道你是不是打错了
jshi123 2011-10-17
  • 打赏
  • 举报
回复
调用时去掉$, 传入字符串,在click事件中用jQuery查询:

function checkSelectItem(button, list) {
button.bind("click", function () {
if ($(list).length == 0) {
alert("请至少选择一项。");
return false;
}
else {
return confirm("确定删除选中项目么?");
}
});
}
$(function () {
checkSelectItem($("#<%=btnDelete.ClientID %>"), "#<%=GridView1.ClientID %> tr input:checkbox:checked:not([name*=cheSelectAll])");
});
cstester 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wknight_it 的回复:]
checkSelectItem($("#<%=btnDelete.ClientID %>"), $("#<%=GridView1.ClientID %> tr input:checkbox[checked="+true+"]").filter(":not([name*=cheSelectAll])"));

试试
[/Quote]

和后面的过滤器没啥大关系吧。。?
cstester 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jshi123 的回复:]
你在调用checkSelectItem的时候,jq已经帮你把list里面的元素算出来了,而不是在click事件的时候动态去算。
[/Quote]

这个我也知道,我是想问怎么解决。。
cstester 2011-10-17
  • 打赏
  • 举报
回复
谢谢大家
jshi123 2011-10-17
  • 打赏
  • 举报
回复
你在调用checkSelectItem的时候,jq已经帮你把list里面的元素算出来了,而不是在click事件的时候动态去算。
风骑士之怒 2011-10-17
  • 打赏
  • 举报
回复
checkSelectItem($("#<%=btnDelete.ClientID %>"), $("#<%=GridView1.ClientID %> tr input:checkbox[checked="+true+"]").filter(":not([name*=cheSelectAll])"));

试试

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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