jquery hover не работает над моими элементами списка

У меня возникла странная проблема, я добавил функцию hover к своим элементам списка, которые генерируются динамически с использованием ajax, но ничего не происходит. Код выполняется без ошибок, но без эффекта. Даже предупреждение не отображается для mouseenter и mouseout. Предупреждение появляется время от времени, но не каждый раз. Я использую следующий код.

$('.category_list li').live("mouseenter", function() { 
alert('I m here');
  $(this).find('.category_list').css('text-decoration','underline');
}).live("mouseleave", function() {
alert('I m gone');
  $(this).find('.category_list').css('text-decoration','none');
}); 

Мой HTML-код

htmlData.push('<ul class="category_list">');
htmlData.push('<li><a href="javascript:void(0);" onclick="callGetApplicationDetails('+iIndex+',0);" >'+categoryName+'</a></li>');

Пожалуйста, помогите мне, потому что я очень сильно застрял.

спасибо гемиш

3 ответа

Решение

Попробуйте использовать mouseover а также mouseout События. Я полагаю, ваш селектор фильтрации искал <li> элементы родителя?

$('.category_list li').live('mouseover mouseout', function(event) {
    if (event.type == 'mouseover') {
        alert('I m here');
        $(this).parent().css('text-decoration','underline');
    } else {
        alert('I m gone');
        $(this).parent().css('text-decoration','none');
    }
});

и вы могли бы, возможно, немного очистить JQuery с новым классом CSS

.category_list.over
{
    text-decoration: underline;
}

и использовать toggleClass()

$('.category_list li').live('mouseover mouseout', function(event) {
    if (event.type == 'mouseover') { alert('I m here'); } 
    else { alert('I m gone'); }

    $(this).parent().toggleClass('over');
});

В заключение! Я использовал livequery, и это сработало!

$('.category_list li').livequery("mouseenter", function() {
    $(this).css({'background-color' : '#A9A8A8'})
}).livequery("mouseleave", function() {
    $(this).css({'background-color' : '#F4F4F4'})
});

@ Патрик: Спасибо за помощь.

Надеюсь, это поможет и другим.

Если вам не нужно поддерживать IE6 с этой функцией, используйте вместо этого CSS:

Пример: http://jsfiddle.net/QLsQp/

.category_list li a {
    text-decoration:none;
}

.category_list li:hover a {
    text-decoration:underline;
}

Это использует :hover псевдо-селектор для воздействия на вложенные a элемент, когда li находится


Проблема с вашим JavaScript состоит в том, что это:

$(this).find('.category_list')

... ничего не найду, потому что .category_list является предком <li> элементы, а не потомок.

Вам нужно это вместо этого:

$(this).find('a')
Другие вопросы по тегам