我有以下代码:
$(".openDialog").live("click", function (e) {
e.preventDefault();
$("<div></div>")
.addClass("dialog")
.attr("id", $(this).attr("data-dialog-id"))
.appendTo("body")
.dialog({
title: $(this).attr("data-dialog-title"),
close: function () { $(this).remove() },
modal: true
})
.load(this.href);
});
$(".close").live("click", function (e) {
e.preventDefault();
$(this).closest(".dialog").dialog("close");
});
有人可以解释我如何从行动中解除功能吗?我对如何做到有点困惑。
“直播”的目的是什么?我听到有人建议“开”。 “开”是否比“活”更好,它是如何运作的?
答案 0 :(得分:4)
只需将函数分解,然后传递函数名称:
close: closeFunction
function closeFunction() {
$(this).remove()
}
$(".close").live("click", closeClick);
function closeClick(e) {
e.preventDefault();
$(this).closest(".dialog").dialog("close");
}
on
确实比live
好。两者都允许您将事件连接到动态添加的内容,但前者更有效,后者不推荐使用。这是你如何使用它
$(document).on("click", ".close", closeClick);
或者,理想情况下,如果所有这些.close
按钮都在一个容器中,例如,一个带有id
foo的div,则可以更有效地执行
$("#foo").on("click", ".close", closeClick);
或者对于1.7之前的jQuery,您必须满足于delegate
$("#foo").delegate(".close", "click", closeClick);
答案 1 :(得分:3)
“直播”的目的是什么?我听到有人建议之前 “上”。 “开”是否比“活”更好,它是如何运作的?
由于不推荐使用jQuery 1.7 .live:http://api.jquery.com/live/
从 jQuery 1.7 开始,不推荐使用.live()方法。使用.on()来 附加事件处理程序。旧版jQuery的用户应该使用 .delegate()优先于.live()。
有关新.on()
功能的详情:http://blog.jquery.com/2011/11/03/jquery-1-7-released/