如何将此javascript / jQuery转换为“非内联”功能?

时间:2012-01-12 06:53:00

标签: javascript jquery

我有以下代码:

$(".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");
});

有人可以解释我如何从行动中解除功能吗?我对如何做到有点困惑。

“直播”的目的是什么?我听到有人建议“开”。 “开”是否比“活”更好,它是如何运作的?

2 个答案:

答案 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/