Живые события jQuery не запускаются для динамического элемента - PullRequest
0 голосов
/ 21 декабря 2010

Почему ни одно из живых (или мертвых) событий, которые я связываю с активацией динамического элемента?

(function ($) {
    $.fn.myPlugin = function () {

    var $filterBox = $("<input type='text'>").live("click", function () {
        alert("Clicked");
    });
    this.before($filterBox); // insert into DOM before current element
    return this; // keep chain
    };
})(jQuery);

Я вызываю myPlugin для нескольких <select> элементов.Я думал, что он будет работать без плагина Live, если я связал его перед добавлением элемента в DOM, но даже живые события не запускаются.Это потому, что у моего элемента нет идентификатора?


Редактировать: Следующее также не работает:

var $filterBox = $("<input type='text'>").bind("click", function () {
        alert("Clicked");
});

Ответы [ 5 ]

2 голосов
/ 21 декабря 2010

.live() работает с селектором (так как он проверяет цель относительно селектора в момент, когда происходит событие), вы не можете прикрепить его непосредственно к элементу ... вы должны просто использовать .click() в этих случаях:

(function ($) {
    $.fn.myPlugin = function () {

    var $filterBox = $("<input type='text'>").click(function () {
        alert("Clicked");
    });
    this.before($filterBox); // insert into DOM before current element
    return this; // keep chain
    };
})(jQuery);

Вы можете попробовать это здесь , или немного короче с .insertBefore():

(function ($) {
  $.fn.myPlugin = function () {    
    $("<input type='text'>").click(function () {
        alert("Clicked");
    }).insertBefore(this);
    return this;
  };
})(jQuery);

Вы можете проверить это здесь .

1 голос
/ 21 декабря 2010

Метод live работает с селекторами , а не с отсоединенными элементами.
Вы можете обрабатывать обычное (не live) click событие, и оно должно работать нормально.

0 голосов
/ 03 января 2011

Решается, не используя глобальные переменные, которые заменяют друг друга, и перебирая каждый элемент с помощью this.each(...):

(function ($) {
    $.fn.myPlugin = function () {
        return this.each(function () {
            // do stuff
        });
    };
})(jQuery);
0 голосов
/ 21 декабря 2010

Может ли это быть просто потому, что "<input type='text'>" не является допустимым HTML? Вы не закрыли свой тег. Однако я не уверен, что jQuery не может закрыть его для вас.

0 голосов
/ 21 декабря 2010

Почему бы просто не связать это?http://jsfiddle.net/9WvpA/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...