JQuery не будет работать с классом

0

Этот простой JQuery не будет работать для меня при использовании on. Есть еще один способ, чтобы использовать on? Будет ли on не работать с class. Я использую jQuery JavaScript Library v1.8.3

Я пытаюсь переместить старый код из live() в on().

$(".subUser").on("click",function() {
  alert("The paragraph was clicked.");
});

<div class="container">
    <div><i class="icon-add subUser"></i></div>
</div>
  • 0
    Вы добавляете свой элемент .subUser динамически?
  • 0
    @Peeyush Да, я.
Показать ещё 1 комментарий
Теги:

3 ответа

2
Лучший ответ

Ваш код выглядит хорошо, если вы не добавляете элементы с классом subUser динамически. Вероятно, вам нужно будет вставить document.ready

$(document).ready(function(){
  $(".subUser").on("click",function() {
     alert("The paragraph was clicked.");  
  });
});

Если вы добавляете элементы динамически, вам требуется делегирование событий. Вы должны использовать родительский элемент в селекторе, который присутствует во время выполнения кода связывания, или вы можете использовать документ или тело.

$(document).ready(function(){
  $(document).on("click", ".subUser", function() {
     alert("The paragraph was clicked.");  
  });
});

Преимуществом делегированных событий является то, что они могут обрабатывать события из элементов-потомков, которые будут добавлены в документ позже. Выбрав элемент, который, как гарантируется, будет присутствовать во время присоединения делегированного обработчика события, вы можете использовать делегированные события, чтобы избежать необходимости часто присоединять и удалять обработчики событий, Reference.

  • 0
    +1 О боже, я помню, когда я впервые начал использовать jQuery, делегирование событий с недавно добавленными элементами сводило меня с ума ...
  • 1
    У меня всегда есть документ. Уже. Просто не прошел мимо этого здесь.
Показать ещё 1 комментарий
0

Тогда вы можете изменить это:

$(".container").on("click", ".subUser" ,function() {

Когда вы перемещаете свой код из .live() в .on() вам необходимо делегировать событие статическому родителю, который был доступен до изменения dom.

поэтому в вашем случае кажется, что в этот момент был доступен класс .container тогда вы должны делегировать его или вы можете делегировать $(document) напрямую, потому что документ всегда доступен для делегирования события (this might be little slower).

0

проверьте, как вы должны заменить свой код

        // Bind
        $( "#members li a" ).on( "click", function( e ) {} );
        $( "#members li a" ).bind( "click", function( e ) {} );

        // Live
        $( document ).on( "click", "#members li a", function( e ) {} );
        $( "#members li a" ).live( "click", function( e ) {} );

        // Delegate
        $( "#members" ).on( "click", "li a", function( e ) {} );
        $( "#members" ).delegate( "li a", "click", function( e ) {} );

СПРАВКА

http://www.elijahmanor.com/2012/02/differences-between-jquery-bind-vs-live.html

Ещё вопросы

Сообщество Overcoder
Наверх
Меню