jquery1.3.2中的方法为:
function CheckTrue(obj)
{
$( " input[@type=checkbox][name=checkItem] " ).attr( " checked " ,$(obj).attr( " checked " ));
}
// 收集被选中的项
function CollectCheckItems()
{
var allcheckboxs = $( " input[@type=checkbox][name=checkItem][checked] " );
var ids = new StringBuilder();
for ( var i = 0 ;i < allcheckboxs.length;i ++ )
{
var id = $(allcheckboxs[i]).attr( " id " ).split( " _ " )[ 1 ];
ids.Append(id)
ids.Append( " , " );
}
var strIds = ids.ToString();
return strIds.substr( 0 ,strIds.length - 1 );
}
关于StringBuilder 见本文最后部分。
全选框的HTML:
单行数据中的选择框的HTML:
该方法的特点是生成的列表HTML中,选择框的id值都为"checkItem_"+id,name为"checkItem"。
以上脚本的方法就是通过选择框的id获得数据列表中该行数据的ID。
jquery1.2.6中的方法为:
function CheckTrue(obj)
{
$( " input[@type=checkbox][@name=checkItem] " ).attr( " checked " ,$(obj).attr( " checked " ));
}
// 收集被选中的项
function CollectCheckItems()
{
var allcheckboxs = $( " input[@type=checkbox][@name=checkItem][checked] " );
var ids = new StringBuilder();
for ( var i = 0 ;i < allcheckboxs.length;i ++ )
{
var id = $(allcheckboxs[i]).attr( " id " ).split( " _ " )[ 1 ];
ids.Append(id)
ids.Append( " , " );
}
var strIds = ids.ToString();
return strIds.substr( 0 ,strIds.length - 1 );
}
在Jquery1.3.2版使用该方法会报错: “Microsoft JScript 运行时错误: 例外被抛出且未被接住”,
定位到 “ throw "Syntax error, unrecognized expression: " + expr;”代码
原因: Jquery1.3.2版,“name”属性前不用加“@”符号。 例如:
$("input[@type=radio][name=checkItem][checked]")
批量删除的方法:
function DeleteCompanyInfos()
{
if ( ! window.confirm( " 确定要删除您选择的数据项吗? " ))
{
return ;
}
var checkedItems = CollectCheckItems();
if (checkedItems == "" )
{
alert( " 请选择要删除的客户! " );
return ;
}
$( " #divGridView " ).html( " <ul> <li> 正在尝试删除数据</li> </ul> " );
$.ajax(
{
type: ' POST ' ,
url: ' ManageAbout.aspx ' ,
dataType: ' text ' ,
data:{Action: ' delete ' ,CompanyInfoIDs:checkedItems},
cache: false ,
success:DeleteCompanyInfosCallBack
}
);
}
// 删除选中俱乐部信息回调函数
function DeleteCompanyInfosCallBack(r)
{
if (r == " 0 " )
{
alert( " 删除成功! " );
}
else
{
alert( " 删除失败! " );
}
LoadCompanyInfoList();
}
ManageAbout.aspx页面的Page_Load中是这样接收参数进行批量删除的。
if (action == " delete " )
{
string strId = Request[ " CompanyInfoIDs " ];
if (strId != null )
{
if (DeleteCompanyInfo(strId))
{
returnValue = " 0 " ;
}
else
{
returnValue = " 1 " ;
}
}
else
{
returnValue = " 1 " ;
}
// 向客户端发送数据
Response.Clear();
Response.Expires = 0 ;
Response.ContentType = " application/xml " ;
Response.Write(returnValue);
Response.End();
}
其中DeleteCompanyInfo为ManageAbout.aspx.cs中的一个方法,调用的是BLL中的数据处理方法。
这种批量处理的方法在ASP.NET MVC中则只需将id字符串传给一个带接收id字符串参数(string类型)的Action既可,Action中则根据获得的id调用数据处理层的删除方法。
上文JS中的StringBuilder方法,是引用的一个JS文件中的方法,代码如下:
function StringBuilder()
{
this .buffer = new Array();
}
StringBuilder.prototype.Append = function Append(string)
{
if ((string == null ) || ( typeof (string) == ' undefined ' ))
return ;
if (( typeof (string) == ' string ' ) && (string.length == 0 ))
return ;
this .buffer.push(string);
};
StringBuilder.prototype.AppendLine = function AppendLine(string)
{
this .Append(string);
this .buffer.push( " \r\n " );
};
StringBuilder.prototype.Clear = function Clear()
{
if ( this .buffer.length > 0 ){
this .buffer.splice( 0 , this .buffer.length);
}
};
StringBuilder.prototype.IsEmpty = function IsEmpty()
{
// return (this.buffer.length == 0);
};
StringBuilder.prototype.ToString = function ToString()
{
return this .buffer.join( "" );
};
// 处理日期字符串
function FormatDateType(date)
{
if (date)
{
return date.getFullYear() + " - " + (date.getMonth() + 1 ) + " - " + date.getDate();
}
else
{
return "" ;
}
}
之前1.3.2版本的JS中,$("input[@type=radio][name=checkItem][checked]")写成$("input[type=radio][name=checkItem][checked]")了,导致在火狐中无效。
因为type前没加“@”,现已更正。