jQuery.live () для элементов выбора плагинов - PullRequest
5 голосов
/ 21 января 2011

Хорошо, моя проблема в том, что я создал плагин jQuery, который связывает событие click и mouseover с элементами, предоставляемыми селектором.Теперь мне нужны эти события, чтобы вместо этого они были «.live», после долгих поисков я нашел «решение», расположенное здесь

Который,Данное решение выглядит следующим образом ..

(function($) {
  $.fn.liveBindTest = function() {
    return this.each(function() {
      $(this).click(function(){
        console.log('click');
        return false;
      });
    });
  };
})(jQuery);

$('a').live('click', function(){ $(this).liveBindTest(); });

Хотя это не имеет смысла, так как тогда плагин не будет привязывать живой щелчок к предоставленным «селекторам».С другой стороны, он «связывает» событие click с элементами селектора.(В этом случае теги привязки, а не специально предоставляемые динамически набором селекторов разработчика)

Приведенный выше пример просто берет длинный маршрут, чтобы привязать живой щелчок ко всем элементам привязки.Который работает в том случае, если вам нужен конкретный элемент live binded для вашего плагина.Но мой плагин основан исключительно на селекторах, предоставленных конечным разработчиком, использующим плагин.Таким образом, это решение означает, что каждый раз, когда разработчик будет либо,

A.Необходимо вручную связать каждое живое событие, в котором нуждается PLUGIN, до того, как они фактически запустят плагин.Вроде как это ..

$('*:not(.complicatedSelectorHere)').live('click', function(){
    $(this).liveBindTest();
});

или

B.Им нужно будет зайти в файл jQuery.plugin.js, перейти к нижней части кода и изменить там живые события.Это был бы уродливый способ сделать что-то, и он совершенно не был бы портативным, что также необходимо для переносимости.

Итак, мой последний вопрос, чтобы убедиться, что со всеми все ясно ..

Вопрос: Как связать событие LIVE с ALL SELECTORS, предоставленным плагину?

Пожалуйста, не предоставляйте очевидное решение ниже, так как оно не работает ...

(function($) {
  $.fn.liveBindTest = function() {
    return this.each(function() {
      $(this).live('click', function(){
        console.log('live clicked');
        return false;
      });
    });
  };
})(jQuery);

1 Ответ

6 голосов
/ 21 января 2011

Каждый объект jQuery имеет свойство selector, поэтому просто используйте его:

$.fn.liveBindTest = function () {
    $(this.selector).live('click', function () {
        console.log('live clicked');
        return false;
    });
});

Конечно, чтобы это работало, нужно использовать какой-то селектор, например:

// This will work
$('body').liveBindTest();

// This WON'T work
$(document.body).liveBindTest();
...