此功能有效。这是从标题复选框的选中状态中选择GridView中所有复选框的快捷方式,仅适用于特定列。
//jQuery to select all checkboxes on the last column (4th column) of gvStudents
function SelectAllCheckboxesCol(chk)
{
//var gV = chk.parent;
var wsList = "#<%=gvStudents.ClientID %> >tbody >tr >td:nth-child(4) > input:checkbox";
var cBox = $(wsList);
cBox.attr('checked', chk.checked); //check all the checkboxes
}
我不喜欢gvStudents中的硬编码,也不喜欢第4列。
如何重新编写它以使其更具动态性 - 即:引入Gridview和第n列数?
这是我的尝试,但我得到文字,没有对象引用错误。
//jQuery to select all checkboxes on the last column (4th column) of gvStudents
function SelectAllCheckboxesCol(chk)
{
var gV = chk.parent; // assume this brings in the Gridview?
var wsList = "#<%=" + gV.CliendID + " %> >tbody >tr >td:nth-child(4) > input:checkbox";
var cBox = $(wsList);
cBox.attr('checked', chk.checked); //check all the checkboxes
}
由于
答案 0 :(得分:1)
为什么不能在“全选”复选框中添加jquery更改事件处理程序? 为该复选框提供正确的ID,然后处理它 说id为chkSelectAll
$("#chkSelectAll").change(function(e){
var check = $(this).is(':checked');
$(this).parents('gvDiv').find('input:checkbox').prop('checked', check);
)};
其中gvDiv是保存gridview的父div
所以试试这种方式
function SelectAllCheckboxesCol(chk, celpos) {
var gV = chk.parents('table'); // assume this brings in the Gridview?
var wsList = $(gV).find("tbody >tr >td:eq(" + celpos + ") > input:checkbox";
var cBox = $(wsList);
cBox.attr('checked', chk.checked); //check all the checkboxes
}
传递复选框列位置
请查看Fiddle
答案 1 :(得分:0)
<强> [解决] 强> 我通过做更多的研究并为自己找到CSS的力量来解决这个问题。我不知道为什么我不首先考虑CSS。
我创建了以下CSS来处理gridview格式。
<style type="text/css">
.arial { font-family: Arial; font-size: small; }
.table { font-family: Arial; font-size: small; background-color: #eeeeee; margin-right: 10px; display: inline; vertical-align: top; }
.header { text-align: center; background-color: #5D7B9D; color: White; font-weight: bold; font-size: medium; }
table.gvCSS {
margin-top: 50px;
font: 12px Verdana;
}
table.gvCSS > tbody > tr {
background-color: white;
}
table.gvCSS > tbody > tr:nth-of-type(odd) {
background-color: #EEE;
}
table.gvCSS > tbody > tr:first-of-type {
background-color: #5D7B9D;
color: white;
}
table.gvCSS > tbody > tr.selected-row {
background-color: yellow;
}
table.gvCSSsub > tbody > tr.selected-row {
background-color: lightgreen;
}
table.gvCSS tr td {
padding: 4px 15px;
}
/* ******** */
#gvCSS > tbody > tr > td:nth-of-type(1) {
width: 100px;
}
#gvCSS > tbody > tr > td:nth-of-type(2) {
width: 70px;
}
#gvCSS table > tbody > tr > td:nth-of-type(1) {
width: 120px;
}
#gvCSS table > tbody > tr > td:nth-of-type(2) {
width: 100px;
}
#gvCSS table > tbody > tr > td:nth-of-type(3) {
width: 100px;
}
</style>
然后,我实现了以下JavaScript来检查同一列中的所有复选框(因此避免了全局查找和设置情况,这是常见的响应),并且能够在嵌套网格视图中与复选框和行分别突出显示行。父GridView。
//################################################################################################################
//The code below came from a question into StackExch and a response from user @Buzinas.
//URL - http://stackoverflow.com/questions/32773892/how-to-pass-gridview-ids-and-other-controls-into-jquery-functions
function gridViewCheckAll(chk) {
var cell = chk.parentNode;
var row = cell.parentNode;
var tbody = row.parentNode;
var rows = tbody.children;
var index = [].indexOf.call(row.children, cell);
for (var i = 1; i < rows.length; i++) {
var checkBoxes = rows[i].children[index].querySelectorAll('input[type=checkbox]');
for (var j = 0; j < checkBoxes.length; j++) {
checkBoxes[j].checked = chk.checked;
highlightRow(checkBoxes[j]);
}
}
}
function highlightRow(chk) {
var row = chk.parentNode.parentNode; //go to the <td> of the checkbox and then again to the <tr> of the <td>, which is the row
if (chk.checked)
addClass(row, 'selected-row');
else
removeClass(row, 'selected-row');
}
//################################################################################################################
作为额外的奖励,我发现了以下填充程序,它允许上述JavaScript在IE7之后的所有浏览器中工作。
// Add ECMA262-5 method binding if not supported natively
//
if (!('bind' in Function.prototype)) {
Function.prototype.bind= function(owner) {
var that= this;
if (arguments.length<=1) {
return function() {
return that.apply(owner, arguments);
};
} else {
var args= Array.prototype.slice.call(arguments, 1);
return function() {
return that.apply(owner, arguments.length===0? args : args.concat(Array.prototype.slice.call(arguments)));
};
}
};
}
// Add ECMA262-5 string trim if not supported natively
//
if (!('trim' in String.prototype)) {
String.prototype.trim= function() {
return this.replace(/^\s+/, '').replace(/\s+$/, '');
};
}
// Add ECMA262-5 Array methods if not supported natively
//
if (!('indexOf' in Array.prototype)) {
Array.prototype.indexOf= function(find, i /*opt*/) {
if (i===undefined) i= 0;
if (i<0) i+= this.length;
if (i<0) i= 0;
for (var n= this.length; i<n; i++)
if (i in this && this[i]===find)
return i;
return -1;
};
}
if (!('lastIndexOf' in Array.prototype)) {
Array.prototype.lastIndexOf= function(find, i /*opt*/) {
if (i===undefined) i= this.length-1;
if (i<0) i+= this.length;
if (i>this.length-1) i= this.length-1;
for (i++; i-->0;) /* i++ because from-argument is sadly inclusive */
if (i in this && this[i]===find)
return i;
return -1;
};
}
if (!('forEach' in Array.prototype)) {
Array.prototype.forEach= function(action, that /*opt*/) {
for (var i= 0, n= this.length; i<n; i++)
if (i in this)
action.call(that, this[i], i, this);
};
}
if (!('map' in Array.prototype)) {
Array.prototype.map= function(mapper, that /*opt*/) {
var other= new Array(this.length);
for (var i= 0, n= this.length; i<n; i++)
if (i in this)
other[i]= mapper.call(that, this[i], i, this);
return other;
};
}
if (!('filter' in Array.prototype)) {
Array.prototype.filter= function(filter, that /*opt*/) {
var other= [], v;
for (var i=0, n= this.length; i<n; i++)
if (i in this && filter.call(that, v= this[i], i, this))
other.push(v);
return other;
};
}
if (!('every' in Array.prototype)) {
Array.prototype.every= function(tester, that /*opt*/) {
for (var i= 0, n= this.length; i<n; i++)
if (i in this && !tester.call(that, this[i], i, this))
return false;
return true;
};
}
if (!('some' in Array.prototype)) {
Array.prototype.some= function(tester, that /*opt*/) {
for (var i= 0, n= this.length; i<n; i++)
if (i in this && tester.call(that, this[i], i, this))
return true;
return false;
};
}
function hasClass(ele,cls) {
return !!ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
}
function addClass(ele,cls) {
if (!hasClass(ele,cls)) ele.className += " "+cls;
}
function removeClass(ele,cls) {
if (hasClass(ele,cls)) {
var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
ele.className=ele.className.replace(reg,' ');
}
}