2

我正在尝试使用on事件。代码

$(".draggable").on("mouseover", function () {
                if (!$(this).data("init")) {
                    $(this).data("init", true).draggable();
                }
});

但上面的代码不起作用。可拖动插件不适用于元素。现在,如果我将on事件替换为livethen 它开始工作。代码

$(".draggable").live("mouseover", function () {
                if (!$(this).data("init")) {
                    $(this).data("init", true).draggable();
                }
});

谁能解释我做错了什么?

4

2 回答 2

3

如果.live()有效,那么这可能意味着您正在操作的元素在代码运行时不存在。

这要么意味着您在运行代码之前无需等待 DOM 准备就绪,要么您需要使用委托版本来.on代替。

$(function() {
    $(document).on("mouseover", ".draggable", function () {
                    if (!$(this).data("init")) {
                        $(this).data("init", true).draggable();
                    }
    });
});

您应该替换document为包含所有.draggable元素的最深嵌套容器的选择器。

于 2012-10-04T10:41:00.587 回答
2

这取决于您使用的 jquery 版本

$(selector).live(events, data, handler);                // jQuery 1.3+
$(document).delegate(selector, events, data, handler);  // jQuery 1.4.3+
$(document).on(events, selector, data, handler);        // jQuery 1.7+  

有关更多详细信息,请参阅此链接

于 2012-10-04T10:40:35.710 回答