下拉列表中的“更改”事件发生了非常奇怪的事情。
基本上我有一个下拉列表,在更改时我必须做一些跨域Web服务调用。此调用是从javascript本身进行的。
第一次更改“选择”列表中的项目时,更改事件仅触发一次。下次两次,它会像这样增长。
任何线索为什么它会像这样?
如果需要参考代码我可以分享。但它是一个简单的“选择”列表和“更改”事件处理程序。
$("#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。
答案 0 :(得分:5)
您必须从更改处理程序中绑定一个新的处理程序。因此,每次运行时,它都会添加一个额外的处理程序实例,以便下次执行..
向我们展示您为更改事件指定的处理程序(以及如何执行此操作)以获得更详细的答案。
<强> [更新] 强>
从你的代码中看起来一切都很好..请检查你调用的两个函数,(addLoadingIcon
和getSearchResponse
),以防它们执行任何jQuery事件绑定,这可能会无意中应用于select对象..
同时检查RankingField
构造函数,以防它绑定任何事件......
答案 1 :(得分:0)
我遇到了OP所描述的相同问题。我发现Chrome Dev Tools帮助我验证它是一个多事件处理程序问题。打开开发工具,使用元素选择器选择&#39;选择&#39;有问题的对象,并检查更改处理程序的事件监听器选项卡。