由于Ajax加载的内容,我不得不更改一个函数:
document.observe('dom:loaded',function() {
$$('.userListHeaderCell').invoke('observe', 'click', function() {
this.toggleClassName('desc');
var colnumber = this.up().childElements().indexOf(this);
var content = this.up(2);
sortColumn(content, colnumber, this.hasClassName('desc'));
});
});
:
document.observe('click', function(e, el) {
if (el = e.findElement('.userListHeaderCell.sortable')) {
el.toggleClassName('desc');
var colnumber = el.up().childElements().indexOf(el);
var content = el.up(2);
sortColumn(content, colnumber, el.hasClassName('desc'));
}
});
sortColumn看起来像:
function sortColumn(content, colnumber, desc) {
content.select('.userListRow').sort(function(a,b){
var atext = a.down(colnumber).innerHTML.stripTags().toLowerCase();
var btext = b.down(colnumber).innerHTML.stripTags().toLowerCase();
return atext.localeCompare(btext) * (desc ? -1 : 1);
}).each(Element.prototype.appendChild, content);
}
切换和colnumber工作和内容是一个对象HTMLDivElement,但似乎我需要转换内容变量或使用另一个函数,但不确定在sortColumn。我得到的错误是:
"无法转换JavaScript参数" nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)" location: "JS frame:: https://www.someurl.com/scripts/prototype.js:::: line 804" data: no]
我需要改变什么才能使它工作?
谢谢。
编辑:IE错误显示:无法获取属性'call'的值:对象为空或未定义prototype.js,第804行字符9
我认为问题出在Element.prototype.appendChild
尝试添加Element.extend(content),但似乎没有帮助。
示例数据:
<div id="contentbox_Users" class="userList">
<div class="userListHeader">
<div class="userListHeaderCell col1 sortable">First Name</div>
<div class="userListHeaderCell col2 sortable">Last Name</div>
</div>
<div id="contentbox_People">
<div class="userListRow">
<div class="userListCell col1">John</div>
<div class="userListCell col2">Smith</div>
</div>
<div class="userListRow">
<div class="userListCell col1">Bob</div>
<div class="userListCell col2">Ray</div>
</div>
<div class="userListRow">
<div class="userListCell col1">Fred</div>
<div class="userListCell col2">Jones</div>
</div>
</div>
</div>
既然是我的代码失败了,我应该试一试。
,
}).each(Element.prototype.appendChild, content);
是
的简写方式}).each(function(row) {
content.appendChild(row);
});
你可以试试那样做,看看情况是否更好。我不认识这个错误,但快速谷歌表明它来自Firefox,涉及传递一个非元素到一个本机函数,期望一个。在这种情况下,我倾向于到处粘贴大量的console.log(...)
调用(并在Firefox中按F12),看看会发生什么。记录数组应该将所有行显示为HTML元素。