在ie6中,SharePoint 2007的onchange事件没有解除绑定



我相信这不是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');

最新更新