让SortTable和Asp.net Ajax和睦相处

相信很多人都可能用过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','');
}
};

时间: 2016-12-26

让SortTable和Asp.net Ajax和睦相处的相关文章

[ASP.NET AJAX]Function对象及Type类的方法介绍

ajax|asp.net|对象 上一回我们从总体上认识了JavaScript Microsoft AJAX Library由于临时有事,没有加入事例显得有点抽象,这一回一定会通过一些事例更加直观的来会一会Asp.NET Ajax脚本库中一个很是重要的类Type.这个类提供了一些扩展面向对象编程的一些反射方法,通过这个类我们可以注册类似.NET中的一些(如:命名空间,类,枚举等等)基本类型.这个Type类继承自window是一个Global类型,不属于任何命名空间.下面我们来看看Type中的一些基

[ASP.NET Ajax] ECMAScript基础类以及Asp.net Ajax对类Object的扩展

ajax|asp.net|object "Everything is Object",在面向对象的编程语言中谁都知道这句话,但对我来说这是一种感觉,只可意会很难言传.由于我对JavaScript和薄弱,所以在看Asp.net Ajax类库的同时也翻出了ECMAScript顺便学习学习.在.NET中所有类都是继承自Object,同样在JS中也一样说有都继承Object,因此如果对Object进行了扩展,那所有继承Object类的后代肯定会拥有祖先的血缘. 既然开始学习JavaScript

利用Asp.net Ajax异步获取xml文档内容

ajax|asp.net|xml|异步 Ajax原意本是让人利用异步获取XML内容,以实现无刷新的网页效果asp.net ajax已将底层内容封装实现起来远比自写xmlhttp来的方便,至少浏览器兼容方面要强得很多下面以一个www.asp.net的示例说明一下利用microsoft ajax library来简单异步获取xml文档的方法 // 返回XML的Web 请求function OnSucceededXml(executor, eventArgs) ...{    if (executor

如何在ASP.Net Ajax中调用WebService

ajax|asp.net|web 今天我想实现利用javascript调用WebService我首先就想到了ASP.Net Ajax 因为微软的东西用着方便,我从网上看了看,这东西好多人都写了,我就从官方找了个Demo下了看看源代码,感觉没什么特殊的,于是动手开始写.先添加一个webservice.asmx然后在default.aspx中加入ScriptManager 并设置serviecs属性<asp:ScriptManager runat="server" ID="

asp.net ajax 和 asp.net 2.0中的fileupload合力打造无刷新文件上传控件

ajax|asp.net|控件|上传|上传控件|刷新|无刷新 在做一个信息管理平台时用到了图片,就像做一个上传的正好用的是asp.net ajax就试着做了一个不很好 自定义用户控件文件 PicUpload.ascx 1<%@ control language="C#" autoeventwireup="true" inherits="Admin_PicUpload, App_Web_mboefw14" %>2 <asp:Ima

Asp.net Ajax 中的脚本错误: Sys未定义 的解决方法

ajax|asp.net|错误|脚本|解决         提前祝大家新年好!前段时间日夜赶工,终于按计划推出了项目的新版本.今天终于有时间写点东西了.         前段时间公司同事在项目中引入了Asp.net Ajax (beta1)版. 用着用着,在查看网页时,不时报 'Sys'未定义 的错误.按照网上的办法对web.confg 做了一翻手术,一点效果也没有.想想也对,web.config跟本没改动过,凭什么突然就把问题都算在人家头上?经过一翻摸索后,突然发现,原来是身份验证惹的祸.在配

ECMAScript基础类以及Asp.net Ajax对类Object的扩展

ajax|asp.net|object "Everything is Object",在面向对象的编程语言中谁都知道这句话,但对我来说这是一种感觉,只可意会很难言传.由于我对javascript和薄弱,所以在看Asp.net Ajax类库的同时也翻出了ECMAScript顺便学习学习.在.NET中所有类都是继承自Object,同样在JS中也一样说有都继承Object,因此如果对Object进行了扩展,那所有继承Object类的后代肯定会拥有祖先的血缘. 既然开始学习JavaScript

在ASP.NET AJAX中别使用mode=Legacy

ajax|asp.net 最近,我帮过几个开发人员,他们遇上了一些古怪的javascript问题,这些问题会在使用ASP.NET AJAX 以及他们的一些自定义的JavaScript脚本时出现.问题的主因在于,他们是把VS 2003 Web项目自动移植到VS 2005的,在他们的web.config文件中还配置有 <xhtmlConformance mode="Legacy"/> . 假如你在你的 web 应用中编写了自定义的客户端JavaScript脚本,而且将使用AJA

ASP.NET AJAX RC Tip:页面中无UpdatePanel时UpdateProgress创建出错问题

ajax|asp.net|创建|问题|页面 昨日下午,IM上遇到菌哥,被问到为什么安装ASP.NET AJAX RC之后,某些页面总是在创建UpdateProgress时出现脚本错误.当时给了一个不太好的解决方案,刚才简单看了一下System.Web.Extensions.dll中的相关实现,得出了一个更好的解决方案,在这里简单地说一下. 首先,我模拟一个"事发现场",由此开始解决问题:一般来说,在所有的页面中可能需要统一的Updating Animation,于是可能会将一个Upda