2012-10-04 52 views
2

我正在嘗試使用on事件。代碼如何使用事件

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

但上述代碼不起作用。可拖動的插件不適用於元素。現在,如果我將on事件替換爲live,那麼它開始工作。代碼

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

任何人都可以解釋我做錯了什麼?

回答

3

如果.live()作品,那麼則可能意味着你操縱元素不存在時的代碼運行。

這可能意味着您在運行代碼之前並未等待DOM準備就緒,或者您需要使用.on的授權版本。

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

你應該與包含所有.draggable元素嵌套最深的容器選擇更換document

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+ 

請參閱本link瞭解更多詳情