2010-02-17 172 views
1

非常奇怪的事情发生在下拉列表的“更改”事件中。选择更改事件触发多次

基本上我有一个下拉列表,关于我必须做一些跨域的web服务调用的变化。这个调用是从javascript本身进行的。

当我在'select'列表中改变一个项目时,第一次改变事件只被触发一次。下次再来两次,它会像这样增长。

任何线索为什么它的行为是这样的?

如果代码需要引用我可以共享。但它是一个简单的'选择'列表和'更改'事件处理程序。

$("#ArtifactSort > select").change(function() {   

    var rankField= ""; 
    rankField = $("#ArtifactSort > select option:selected").text(); 

    alert('within select change event artifact: '+ rankField); 

    //Making the text little lighter and showing the loading icon. 
    //$("#ArtifactPetalContentUL").css("filter", "alpha(opacity: 30)"); 
    $loadingIconForArtifact = addLoadingIcon("ArtifactPetalContentUL", "Artifact"); 

    var refinedStoresLocal= new Array(); 
    for (var storeIndex in _searchResponseForArtifact.searchResult.searchRequestProcessed.stores) { 
     refinedStoresLocal.push(_searchResponseForArtifact.searchResult.searchRequestProcessed.stores[storeIndex].name); 
    } 

    var refinedFiltersLocal = new Array(); 
    for (var filterIndex in _searchResponseForArtifact.searchResult.searchRequestProcessed.filters) { 
     refinedFiltersLocal.push(_searchResponseForArtifact.searchResult.searchRequestProcessed.filters[filterIndex]); 
    } 

    //rankfield. 
    var rankLocal=new Array(); 
    rankLocal.push(new RankingField(rankField, 1, 0)); 
    //Request object and WS Call. 
    var _searchRequestForArtifactLocal = getArtifactSearchRequestObject(_queryStringLocal, _memberId, _communityId, _pageNumber, _pageSize, propertiesForArtifact, refinedStoresLocal, ClassificationClusteringObjectsForArtifact, refinedFiltersLocal, rankLocal); 
    getSearchResponse("successcallForArtifact", _searchRequestForArtifactLocal); 
}); 

谢谢 Subrat。

回答

5

必须从改变处理程序中被捆绑了新的处理程序。所以,每次运行时,它增加了处理器的另外一个实例,下一次要执行..

向我们展示了处理程序中分配给更改事件(你如何做到这一点),获得更详细的答案..

[更新]

从您的代码似乎一切都很好..请检查两个函数调用,虽然,(addLoadingIcongetSearchResponse)的情况下,他们做任何的jQuery事件绑定,这可能无意中适用于选择对象..

还要检查你的RankingField构造的情况下,它结合任何事件......

+0

我有一个类似的问题,除了我从动态加载的内容绑定到静态对象的功能。从动态内容看来,我似乎只绑定了一次,但因为我绑定了静态控件,所以每次加载动态内容的新实例时都会累积事件:/ – Triynko

0

我所描述的相同问题OP。我发现Chrome Dev Tools帮助我验证了这是一个多重事件处理程序问题。打开开发工具,使用元素选择器选择有问题的“选择”对象,然后检查事件监听器选项卡上的更改处理程序。