首页 > OOP语言 > AJAX > 正文

让SortTable和Asp.net Ajax和睦相处
2011-12-26 00:00:00   来源:www.bianceng.cn   评论:0 点击:

暂时无描述信息

相信很多人都可能用过SortTable这个对Table元素进行排序的JS类库。

SortTable只需要设置Table的class就可以实现简单的应用。

可是如果在引用了SortTable同时用到了Asp.net Ajax.呵呵,这下绝对热闹。好像仇敌一样。

错误提示:

Sys.ArgumentTypeException: Object of type ‘Object’ cannot be converted to type ‘Array’

经过几个小时的努力,通过FireFox+FireBug的协力帮助,终于找到症结。主要是SortTable里面的forEach实现和Asp.net Ajax的forEach实现有冲突。

当然,要让Ajax.net Ajax里面的forEach失效可不是什么容易的事情。只能让SortTable里面的forEach失效了。通过多SortTable里面的 forEach进行分析,最终舍弃了 SortTable里面的forEach实现并且将实现代码去除,然后将forEach改成了for实现。终于……和睦相处了。

当然还可以有更好的改法,就是将forEach的方法改名,但是发现SortTable引用的forEach也就那么一点,于是用for了。

有两处需要修改:

第一处:

//原始代码
// Array.forEach(document.getElementsByTagName('table'), function(table) {
// if (table.className.search(/\bsortable\b/) != -1) {
// sorttable.makeSortable(table);
// }
// });
// alert(document.getElementsByTagName('table').length);
// //修改代码
for(i=0; i
{
// alert(document.getElementsByTagName('table').length);
table=document.getElementsByTagName('table')[i];
if (table.className.search(/\bsortable\b/) != -1)
{
sorttable.makeSortable(table);
}
};

第二处:

//原始代码
//forEach(theadrow.childNodes, function(cell) {
// if (cell.nodeType == 1) {
// cell.className = cell.className.replace('sorttable_sorted_reverse','');
// cell.className = cell.className.replace('sorttable_sorted','');
// }
// });
//修改代码
for(i=0; i
{
var cell=theadrow.childNodes[i];
if (cell.nodeType == 1) { // an element
cell.className = cell.className.replace('sorttable_sorted_reverse','');
cell.className = cell.className.replace('sorttable_sorted','');
}
};

相关热词搜索:

上一篇:现存问题以及解决方案:在ASP.NET AJAX客户端得到服务器端的Data Table
下一篇:浅谈ASP.NET Ajax中调用JavaScript的服务

分享到: 收藏