【问题标题】:Alternative to jQuery livequery plugin?jQuery livequery 插件的替代品?
【发布时间】:2011-09-26 23:04:52
【问题描述】:

我需要检查一个元素何时处于活动状态,我正在做:

$('#obj').livequery(function() { ... });

如何使用 live 方法或其他方式做到这一点?

【问题讨论】:

  • 它是您动态生成的(不止一次?)还是在加载时出现在您的页面上? (即你可以使用$(document).ready(...);吗?)
  • 我会用javascript生成这个'#obj'然后它是动态的
  • idk 为什么但是当我在某些元素中执行 fadeIn() 时,livequery 插件将无法工作,因为我想找到一个新的替代方案。

标签: jquery livequery


【解决方案1】:

这是一个老问题,但为了记录,这里是我的 5 美分:


livequery 的替代方法是使用 Publish/Subscribe 方法,例如此实现 jQuery Tiny Pub/Sub: A really, really, REALLY tiny pub/sub implementation for jQuery.

例如,我是这样使用它的:

// inform of DOM change (mostly through AJAX)
$.publish("/table/loaded");

// re-execute plugin
$.subscribe("/table/loaded", function(e, data) {
    $("#my_id input[name='date']").datepicker();
});

+信息:Understanding the Publish/Subscribe Pattern for Greater JavaScript Scalability

【讨论】:

    【解决方案2】:

    如果是您的代码将元素添加到 DOM,则在创建它时在其上运行您的代码:

    $('body').append('<div id="obj">some new object</div>');
    
    var obj = $('#obj');
    
    obj.runSomeCode();
    

    ...或者您甚至可以在附加之前完成:

    var obj = $('<div id="obj">some new object</div>');
    
    obj.runSomeCode();
    
    obj.appendTo('body');
    

    【讨论】:

    • 好吧,作为使用 livequery 的替代方法,您可以在将元素淡入页面时自己运行该函数。
    • @Rapososoo:这是使用 livequery 的替代方法。如果您不希望 livequery 自动执行,则需要手动编写代码,无论如何 IMO 都是更好的做法。
    • 问题是多次点击会创建相同的元素。 Livequery 很棒,因为您关注的是创建者而不是创建者。
    【解决方案3】:

    作为 livequery 插件的替代方案,您可以查看 $.whenLive jQuery 插件:

    $.whenLive 允许您跟踪一个或多个元素的 DOM 树插入。

    http://bitcubby.com/tracking-the-insertion-of-javascript-components-into-the-dom/

    这是该页面的示例:

    var widget = $("<div>I am a nobody. Nobody is perfect. Therefore, I am perfect.</div>");
    $(widget).onLive(function() {
        // Awesomesauce.
        var height = $(this).height();
        var width = $(this).width();
    });
    $("body").append(widget);
    

    【讨论】:

      【解决方案4】:

      这是一个老问题,但我很惊讶没有答案,因为它很简单。您必须使用 on() 并将事件附加到父级或正文。例如:

      $('#obj').livequery('click', function() { ... });
      $('#obj').livequery(function() { ... });
      

      成为

      $('body').on('click', '#obj', function() { ... });
      $('body').on('DOMNodeInserted','#obj', function() { ... });
      

      注意 DOMNodeInserted 是 IE9+

      【讨论】:

        猜你喜欢
        • 2016-12-19
        • 2010-12-07
        • 1970-01-01
        • 2012-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-17
        相关资源
        最近更新 更多