我相信这不是sharepoint 2007的问题,但我宁愿涵盖我所有的基础。
我在一家大公司做顾问,为他们的内部网开发sharepoint解决方案。我的任务之一是将sharepoint 2007列表视图中的常规下拉列表切换为具有提前输入和过滤功能的列表。所以我选择了一个jquery组合框。
现在,除了ie6,这个组合框可以工作,onchange事件也可以工作。我的流程如下:
function diidFilterLinkTitleNoMenuOnChange()
{
FilterField("{9232EB4D-2E5D-40D3-A1C0-818CC21AC839}","LinkTitleNoMenu",this._selOption.value, this.selectedIndex);
}
$(document).ready(function(){
window.dhx_globalImgPath='../_layouts/Intranet.Portal.Custom/PeopleChangesFiles/imgs/';
var y = document.getElementById('diidFilterLinkTitleNoMenu');
if(y != null)
{
$('#diidFilterLinkTitleNoMenu').change(function(){}).attr('onchange',function(){});
var z = dhtmlXComboFromSelect('diidFilterLinkTitleNoMenu');
z.enableFilteringMode(true);
z.attachEvent("onchange",diidFilterLinkTitleNoMenuOnChange);
y.parentNode.removeChild(y);
}
})
在把选择列表变成一个组合框之前,我正在删除当前的onchange事件,然后重新分配一个不同的onchange事件。
在ie6中发生的事情是,旧的onchange事件仍然存在,仍然附加,并首先触发,因为它破坏了代码,我的事件没有运行。
在ie6中删除事件有特殊的方式吗?还是我做错了?
这是因为change()方法是.bind('change', handler)
的快捷方式。.bind附加事件处理程序,而不是删除或覆盖。
引用bind() page:
当事件到达元素时,所有处理程序都绑定到该事件元素的类型被触发。如果有多个处理程序注册后,它们将始终按照它们原来的顺序执行绑定。
使用unbind删除事件处理程序:$('#diidFilterLinkTitleNoMenu').unbind('change');