使用jQuery从HTML元素中删除所有回调
Remove all the callbacks from an HTML element with jQuery
我有一个select
菜单,通过AJAX更改,生成另一个select
菜单,这反过来又生成另一个select
菜单与另一个回调更改(让我们说alert(chosenValue)
)。通过第一次使用这些select
菜单,我正确地生成了第二个和第三个select
的内容,并且正确地打印了警报。
从第二次开始,当我为第三个select
生成新内容时,当选择一个选项时,会触发多个警报,其中包含select
中该位置的元素。我猜这些回调在那里生成并留在那里,因为我用$("select#dropdownMenu3").change(function() {...});
生成了它们。
是否有一种方法可以删除这种生成的回调,并再次拥有"处女"select#dropdownMenu3
?我使用的是jQuery,如果解决方案包含它,那就太棒了!谢谢!
编辑:代码因为- reEDIT:我开始认为问题要严重得多。这是整个
/*All the variables that you see used are defined somewhere up here*/
$("select#dropdownMenu1").change(function(){
$('select#dropdownMenu3').unbind('change');
var typeChosen = $(this).children(":selected").html();
if(!searchSuggestions){
$.get( "/searchdata", function( data ) {
data = JSON.parse(data);
searchSuggestions = data;
for(var i = 0; i < data.length; i++){
if(data[i].type == typeChosen){
$("#dropdownMenu2").empty();
$("#dropdownMenu2").append("<option disabled>Choose a Predicate</option>");
for(var j = 0; j < data[i].predicates.length; j++){
$("#dropdownMenu2").append("<option value='" + j + "'>" + data[i].predicates[j].predicate + "</option>");
}
}
}
$("#dropdownMenu2").select2();
$("select#dropdownMenu2").change(function(){
predicateChosenIndex = parseInt($(this).children(":selected").val());
$("#tdDropdownMenu3").html("");
$('#tdDropdownMenu3').append("<select class='"js-example-basic-multiple'" id='"dropdownMenu3'"><option disabled>Choose an Object</option></select>");
for(var i = 0; i < data.length; i++){
if(data[i].type == typeChosen){
for(var k = 0; k < data[i].predicates[predicateChosenIndex].values.length; k++){
$("#dropdownMenu3").append("<option value='" + k + "'>" + data[i].predicates[predicateChosenIndex].values[k].value + "</option>");
}
}
}
$("#dropdownMenu3").select2();
$("select#dropdownMenu3").change(function(){
objectChosenIndex = parseInt($(this).children(":selected").val());
for(var i = 0; i < data.length; i++){
if(data[i].type == typeChosen){
alert(data[i].predicates[predicateChosenIndex].values[objectChosenIndex].value + " chosen");
}
}
});
});
});
}
您可以使用:
$('select#dropdownMenu3').unbind('change');
但是只要我们没有看到你如何生成你的html,这可能不是最好的解决方案。
相关文章:
- 可以clearTimeout删除JavaScript中已触发超时事件的未处理回调
- 反应.js:将回调传递给子组件并删除组件
- 通知承诺角度删除回调
- 删除 ajax 回调问题
- 根据条件在 JQuery 表单插件中提交回调之前删除项目
- 如何在附加了 .bind(this) 的回调上删除事件侦听器
- 删除已退回的回调
- Node sequelize回调承诺期望一个函数,是否有一种方法可以通过函数调用删除已声明的函数
- 为什么删除后打开不;t调用onupgradewneed回调
- jQuery SignalR client.off()函数只删除上次注册的回调
- 当处理程序需要接收回调函数时,删除jQuery事件侦听器
- 如何通过回调或其他方式删除方法
- jQuery:如何在删除复选框后回调/恢复
- #Dart:当jquery向Dart回调方法触发事件时,Div将被删除
- 使用removeEventListener删除包装函数回调
- EventListener可以通过取消它的回调函数来删除吗?
- Rails自定义Twitter引导模式删除方法,回调问题
- Firebase Google OAuth - Auth uid不同于先前已删除的电子邮件的回调返回的uid
- 使用jQuery从HTML元素中删除所有回调
- 如何从angularjs的$q.defer() promise对象中删除回调?