jQuery Traversing + Live Event Handlers

У меня проблемы с прикреплением обработчиков событий реального времени к определенным строкам.


Что у меня есть и что мне нужно:

У меня есть HTML-код, который будет генерироваться динамически после загрузки страницы следующим образом:

Я хотел бы два щелчка events:

  1. Один для строк, которые не являются " Я пробовал и проблема:

    Однако я не могу понять, как использовать селектор для выбора «элемента, за которым стоит определенный элемент» (т.е. «предыдущий» селектор). Таким образом, лучшее, что я могу сделать, это:

    1. Строки, которые не являются «бонусной строкой»: $ ('tr: not (: has (.bonus))')
    2. Строки, в которых есть "бонусная строка" после них: $ ('tr + tr: has (.bonus)'). prev ()

    Это все хорошо, кроме случаев, когда я использую live () для объекта jQuery, который был получен путем обхода, а не чистого выбора, т.е.

    $('tr:has(.bonus)').prev().live('click', function() {
       alert('hello');
    });
    

    Я получаю следующую ошибку:

    неперехваченное исключение: синтаксическая ошибка, Я пробовал, и проблема:

    Однако я не могу понять, как использовать селектор для выбора «элемента, за которым стоит определенный элемент» (т.е. «предыдущий» селектор). Таким образом, лучшее, что я могу сделать, это:

    1. Строки, которые не являются «бонусной строкой»: $ ('tr: not (: has (.bonus))')
    2. Строки, в которых есть "бонусная строка" после них: $ ('tr + tr: has (.bonus)'). prev ()

    Это все хорошо, кроме случаев, когда я использую live () для объекта jQuery, который был получен путем обхода, а не чистого выбора, т.е.

    $('tr:has(.bonus)').prev().live('click', function() {
       alert('hello');
    });
    

    Я получаю следующую ошибку:

    неперехваченное исключение: синтаксическая ошибка, нераспознанное выражение :)


    Проблема как еще более минимальный пример:

    Я надеялся, что это было локализовано для какого-то скрипта, который я использую, но я выделил это в минимальный пример jsFiddle, который все еще повторяет проблему для меня : http://jsfiddle.net/ptvrA/

    HTML:

    JS:

    $('#target').prev().live('click', function () {
       alert('f');
    });
    

    Из этого ответа видно, что это известное ограничение live .


    Мои обходные пути

    Для справки, мои обходные пути:

    1. Каким-то образом отметить строки, у которых есть «бонусная строка»;
    2. Привязать щелчок ко всем строкам, и проверим, есть ли после них в обработчике «бонусная строка».

    Но если я смогу получить «более приятное» решение, даже из любопытства на случай, если я столкнусь с этой проблемой в другой ситуации, Я бы оценил это.

    Ура

5
задан Community 23 May 2017 в 12:07
поделиться