2015-04-06 2 views
2

С $('#sidebar').toggleClass('small'); Im добавление добавления/удаления указанного класса от #sidebar.jQuery - Hover после изменения DOM

Когда #sidebar имеет класс small Я был в состоянии выполнить дополнительные действия, когда пользователь наводил верх над #sidebar.small.

Я пытался добиться этого с кодом внизу:

$("#sidebar.small").on({ 
    mouseenter: function() { 
     alert(1); //doesn't work 
}, 
    mouseleave: function() { 
     //stuff to do on mouse leave 
    } 
}); 

Но это не работает.

Как мне выполнить функцию наведения на измененный элемент DOM?

ответ

1

Вы должны быть в состоянии использовать метод JQuery парения, чтобы сделать это: https://api.jquery.com/hover/

Обновление: К сожалению заметил еще одну вещь ... если изначально установить обработчик событий, не #sidebar имеют CSS тег или не? Как ваш код написан, если он этого не сделает, он попытается подключиться к элементу $ ("# sidebar.small"), поэтому, если тэг css не существует, он не будет прикрепляться ни к чему.

Я думаю, что вы хотите больше, как это:

$("#sidebar").on({ 
    mouseenter: function() { 
     if($('#sidebar').hasClass('small')) { 
      alert(1); 
     } 
    } 
}); 

Update снова опечатка, извините ...

0

Jquery только связывает обработчики для найденных элементов в момент связывания.

Решение состоит в том, чтобы переустановить соответствующие обработчики при добавлении класса.

jsfiddle

код из скрипки:.

$('#foo').click(function(){ 
    $('<span></span>') 
    .text('A Span') 
    .appendTo('#container'); 
}); 

$('#bar').click(function(){ 
    $('span').first().toggleClass('small'); 
    bindHover();  
}) 

function bindHover(){ 
    $('span.small').unbind('hover'); // Avoid re-binding something 
    $('span.small').hover(function(){ 
     alert('a') 
    }); 
} 

bindHover(); 
+0

Я думаю, чтобы это работало, вам нужно только добавить bindHover на $ («# бар») нажмите, когда он еще не там ... иначе вы добавляете дополнительные привязки, и вы получите больше 1 предупреждения. – Brian

+0

О, ты прав. клейкая лента исправить вверх – Plato

+0

Но, честно говоря, мой ответ слишком сложен. Я думал, что OP необходимо сделать для динамических элементов. Лучшим решением для единственного, всегда присутствующего div '# sidebar' является привязка один раз к hover или mouseenter и проверка класса в обработчике, как вы продемонстрировали в своем ответе. – Plato

 Смежные вопросы

  • Нет связанных вопросов^_^