JQuery解决GridView控件翻页问题解决方案!
最近项目中遇到一个问题:GridView翻页时记录不到翻页前选择的项。
我们的解决办法是:
1、用一个服务器控件HiddenFile记录到每个页面所选择项目的ID,这里有两问题,添加字串和删除相应的字串。
//给每个checkbox(注:id为checkAll的一个input控件,为方便全选,所添加的存在于HeadTemplate中的一个由JQuery控制的chechbox)添加事件。
$(document).ready(function () {//如果选择,添加。
$(":checkbox:not(input[id='checkAll'])").click(function () {
if (this.checked == true) {
$("#hfId").val($("#hfId").val() + $(this).siblings("input[type=hidden]").val() + ";");//siblings()获取匹配集合中每个元素的同胞,通过选择器进行筛选是可选择的。
}
});
});
$(":checkbox:not(input[id='checkAll'])").click(function () {
if (this.checked == true) {
$("#hfId").val($("#hfId").val() + $(this).siblings("input[type=hidden]").val() + ";");//siblings()获取匹配集合中每个元素的同胞,通过选择器进行筛选是可选择的。
}
if (this.checked == false) {//如果取消选择则去掉所选择的ID,删除。
var val = $(this).siblings("input[type=hidden]").val();
var str = $("#hfId").val();
if (str.indexOf(";" + val + ";") > -1) {//如果包含则去掉所选择的项。
str = str.replace(";" + val, "");
$("#hfId").val(str);
if (this.checked == false) {//如果取消选择则去掉所选择的ID,删除。
var val = $(this).siblings("input[type=hidden]").val();
var str = $("#hfId").val();
if (str.indexOf(";" + val + ";") > -1) {//如果包含则去掉所选择的项。
str = str.replace(";" + val, "");
$("#hfId").val(str);
}
}
});
});
2.当GirdView翻页时如何记录到ID匹配、选中状态。我们在这里是做循环处理。
$(document).ready(function () {
//绑定已选项
var table = $("#gridShow");
table.find("tr").each(function (i) {//在第行tr中去循环。
if (i > 0) {
if ($("#hfId").val().indexOf(";" + $(this).find("td:first").find("input[type=hidden]").val() + ";") > -1) {//我们这里将HiddenFile放在第一列的HeaderTemlate中所以我们会找TR中的第一个td.
//绑定已选项
var table = $("#gridShow");
table.find("tr").each(function (i) {//在第行tr中去循环。
if (i > 0) {
if ($("#hfId").val().indexOf(";" + $(this).find("td:first").find("input[type=hidden]").val() + ";") > -1) {//我们这里将HiddenFile放在第一列的HeaderTemlate中所以我们会找TR中的第一个td.
$(this).find("td:first").find("input[type=checkbox]").attr("checked", true);//直接加上checked属性赋值为true.这们我们将所有的已经在HiddenFile中的所有ID项对应到当页的gridview让其选中状态。
}
}
}
})
})
});
3.以上两步我们基本上完了其选中和绑定。但在全选中我们也要做相应的动作。
<script type="text/javascript">
$(function () {
//绑定事件
$("#checkAll").click(function () {
var tab = $("#gridShow");
if (this.checked == true) {
$(":checkbox:not(input[id='checkAll'])").attr('checked', true);//如果触发则全部checkbox为选中状态。
$(function () {
//绑定事件
$("#checkAll").click(function () {
var tab = $("#gridShow");
if (this.checked == true) {
$(":checkbox:not(input[id='checkAll'])").attr('checked', true);//如果触发则全部checkbox为选中状态。
tab.find("tr").each(function (i) {
if (i > 0) {//注意:这里其实有一个bug,在做全选添加时,应该判断如果ID已经在HiddenFile中则不应该再去加。
$("#hfId").val($("#hfId").val() + $(this).find("td:first").find("input[type=hidden]").val() + ";");
}
if (i > 0) {//注意:这里其实有一个bug,在做全选添加时,应该判断如果ID已经在HiddenFile中则不应该再去加。
$("#hfId").val($("#hfId").val() + $(this).find("td:first").find("input[type=hidden]").val() + ";");
}
});
}
else {
$(":checkbox:not(input[id='checkAll'])").attr('checked', false);//如果触发则全部checkbox为不选中状态。
tab.find("tr").each(function (i) {
if (i > 0) {
var val = $(this).find("td:first").find("input[type=hidden]").val();
var str = $("#hfId").val();
if (str.indexOf(";" + val + ";") > -1) {//如果所选择的GridView的ID在HiddenFile中去掉。
str = str.replace(";" + val, "");
$("#hfId").val(str);
}
}
}
else {
$(":checkbox:not(input[id='checkAll'])").attr('checked', false);//如果触发则全部checkbox为不选中状态。
tab.find("tr").each(function (i) {
if (i > 0) {
var val = $(this).find("td:first").find("input[type=hidden]").val();
var str = $("#hfId").val();
if (str.indexOf(";" + val + ";") > -1) {//如果所选择的GridView的ID在HiddenFile中去掉。
str = str.replace(";" + val, "");
$("#hfId").val(str);
}
}
})
}
})
})
</script>
好了,已经写到这里了,基本功能已经完成了其中包括table操作,和一些基本的字串操作indexOf,和replace
浙公网安备 33010602011771号