[英]User-defined callback function is being fired multiple times in Javascript/jQuery
有一些类似的问题,但它们似乎都与本机jQuery回调函数有关。
因此,我有这段代码(实时)创建了一个包含一些表单元素的div。 在删除div之前(在此之前),应在回调函数中检索这些元素的值。
function popup(callback) {
// ...
// before removing the div
callback.call();
// remove div
}
出乎意料的是,在第一次执行弹出窗口之后,多次(越来越多)触发了回调函数。
我简化了代码,这是小提琴 。
我希望这是您所需要的。
function popup(callback) {
$("body").append('<div><span id="test">test</span> <a href="#" id="close">close</a></div>');
$(document).on("click", "#close", function() {
callback.call();
//
//callback = function() {};
$(document).off("click", "#close");
$("div").remove();
});
};
$(document).on("click", "#open", function() {
popup(function() {
alert('$("#test").length = ' + $("#test").length);
});
});
基本上,您需要通过调用off()方法来删除事件处理程序。
尝试动态生成元素,而不使用字符串。 这将使您更容易绑定事件。
function popup(callback)
{ var $elem = $("<div></div>");
$elem.append($("<span></span>").html("test"));
$elem.append(" ");
$elem.append($("<a></a>").html("close").attr("href", "#"));
$("body").append($elem);
$elem.find("a").click(function() {
callback.call();
$elem.remove();
});
};
$(document).on("click", "#open", function() {
popup(function() {
alert('$("#test").length = ' + $("#test").length);
});
});
示例: http : //jsfiddle.net/4se7M/2/
我不知道确切的情况,但是为什么每次显示弹出窗口时都想绑定和取消绑定该事件?
这样只能绑定一次,不是吗?
$(document).on("click", "#close", function() {
alert('$("#test").length = ' + $("#test").length);
$("div").remove();
});
function popup() {
$("body").append('<div><span id="test">test</span> <a href="#" id="close">close</a></div>');
};
$(document).on("click", "#open", function() {
popup();
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.