我有一个自动生成按钮的弹出窗体。关闭表单时,其中的所有字段都将被清除。
function closeDialog() {
componets_array_ID =[];
varButton = [];
$.ajaxSetup({ cache: false });
$(".getInputComponent").val('');
$(".prodName").val('');
$(".prodProvider").val('');
$(".prodCode").val('');
$(".selectCategory").find('option').remove();
if($(".dialog_create_product").dialog("isOpen")){
$(".dialog_create_product").dialog("destroy")
};
}
第二次打开窗口后,生成的按钮在单击时会处理两次。如果窗口关闭并第三次打开,则按钮将被处理三次……以此类推。
如果需要,这是整个画布:
open: function (event, ui) {
//формируем select
$.ajax({ url: "/ButtonServlet",
data: {
getCategory : "getCategory",
},
type: 'POST',
dataType:'json',
success: function(data) {
$.each(data, function (index, element) {
$('.selectCategory').append($("<option></option>")
.attr("value",element[0])
.text(element[1]));
})
fillCompound($(".selectCategory").val())
},
error: function(request, status, error){
alert("Error: Could not back");
}
});
//определяем выбранный select и заполняем кнопки
$(".selectCategory").change(function (){
var selId;
$( "select option:selected" ).each(function() {
selId = $( this ).val()
});
fillCompound(selId)
});
//ВЫЗЫВАЕТСЯ ПОВТОРНО!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//обработка кнопок
$(".compound").on("click", ".btnCompound", function () {
$(".components").append($(this));
componets_array_ID.push($(this).attr("id"));
});
//ВЫЗЫВАЕТСЯ ПОВТОРНО!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$(".components").on("click", ".btnCompound", function () {
$(".compound").append($(this));
comp_index = componets_array_ID.indexOf($(this).attr("id"));
if (comp_index > -1) {
componets_array_ID.splice(comp_index, 1);
}
alert("вызов2")
});
$(".components").on("click", ".varButton", function () {
$(this).remove();
varBtn_index = varButton.indexOf($(this).text());
if (comp_index > -1) {
varButton.splice(varBtn_index, 1);
}
});
$(".divInput").on("click", ".addComponent", function () {
if ($(".getInputComponent").val() != ""){
$(".components").append("<button class=\"varButton\">"+$(".getInputComponent").val()+"</button>");
varButton.push($(".getInputComponent").val());
$(".getInputComponent").val('');
}
})
},
每次执行处理程序时,
open您都会分配新的/附加的处理程序click。把最后一个拿出open来$(document).ready。更新(逐点):
$.ajaxSetup({ cache: false });- 选项之一的全局(每页)设置$.ajax,不影响分配给 DOM 元素的事件处理程序。$(".dialog_create_product").dialog("destroy")- http://api.jqueryui.com/dialog/#method-destroy:也与您的代码分配的事件处理程序无关。
$(".selectCategory")如果、$(".compound")和选择$(".components")器选择的元素$(".divInput")继续存在(即,在对话框打开时没有被删除和重新创建),那么它们的事件处理程序click将在重复执行open.