Неопределенная переменная при наведении

0

У меня есть два списка. Когда я нахожусь на Томе в одном списке, я хочу, чтобы описание о нем было красным, поэтому я добавил класс зависания, как показано ниже. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу удалить состояние зависания, поскольку получаю undefined, когда я покидаю состояние зависания. Я прокомментировал несколько вещей, которые я пробовал до сих пор. Есть ли способ узнать значение id или удалить любой класс с именем hover на странице, когда я покидаю зависание?

    <ul id="one-list">
        <li id="u11">Tom</li>
        <li id="u22">Jerry</li>
    </ul>

    <ul id="another-list">
        <li id="a11">Tom is 22 years old</li>
        <li id="a22">Jerry is 18 years old</li>
    </ul>

    $("#one-list li").hover(

    function () {
        var id = jQuery(this).attr('id') || '';
        id = id.replace(/u/, '');
        $('#another-list #a' + id ).addClass("hover");
    }, function () {
        //$('body').removeClass("hover");
        //$('#another-list #a' + id ).removeClass("hover");
    }
    );

    .hover {
        color:red;
    }
Теги:
hover

2 ответа

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

Вы получаете эту ошибку, потому что id определен только в первой функции. Вам нужно будет снова получить id во второй функции, например:

$("#one-list li").hover(
    function () {
        var id = jQuery(this).attr('id') || '';
        id = id.replace(/u/, '');
        $('#another-list #a' + id ).addClass("hover");
    }, function () {
        var id = jQuery(this).attr('id') || '';
        id = id.replace(/u/, '');
        $('#another-list #a' + id ).removeClass("hover");
    }
);

Или проще

$("#one-list li").hover(
    function () {
        var id = this.id.replace('u', '');
        $('#another-list #a' + id ).addClass("hover");
    }, function () {
        var id = this.id.replace('u', '');
        $('#another-list #a' + id ).removeClass("hover");
    }
);

Или еще лучше:

 $("#one-list li").hover(
    function () {
        var id = this.id.replace('u', '');
        $('#another-list #a' + id ).toggleClass("hover");
    }
 );
  • 0
    спасибо за ответ, я попробовал то, что вы сказали, но я не могу удалить класс по какой-то причине? В этой скрипке jsfiddle.net/aaronk85/6Q9LX я добавил в предупреждение, которое подтверждает, что идентификатор есть, но он не удаляется? Вы видите, что я здесь пропустил?
  • 0
    @ ak85 Во второй функции у вас было $('body').removeClass("hover") , но похоже, что вы намеревались сделать id = id.replace(/u/, '') . Смотрите мой обновленный ответ.
Показать ещё 1 комментарий
0

попробуйте это. Поместите "временную" переменную с другим элементом списка. Я не понимаю, почему вы удаляете "u" из id.. но...

http://jsfiddle.net/ND3p8/3/

(function($){

    var $listItem = $("#onelist li");
    var $anotherListItem = null;

    $listItem.hover(function(){ //handlerIn

        var $item = $(this);
        var id    = $item.attr('id');


        id = id.replace(/u/,''); //replace letter 'u'...why?

        $anotherListItem = $("#a"+id);

        if( $anotherListItem ){
            $anotherListItem.addClass('hover');
        }

    },function(){ //handlerOut

        if( $anotherListItem ){
            $anotherListItem.removeClass('hover');
        }

        $anotherListItem = null;

    });


})(jQuery);
  • 0
    Вы не используете $item во второй функции.
  • 0
    спасибо @ Бармар. снято и исправлено.

Ещё вопросы

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