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