У меня проблемы с прикреплением обработчиков событий реального времени к определенным строкам.
Что у меня есть и что мне нужно:
У меня есть HTML-код, который будет генерироваться динамически после загрузки страницы следующим образом:
Я хотел бы два щелчка
events:
Однако я не могу понять, как использовать селектор для выбора «элемента, за которым стоит определенный элемент» (т.е. «предыдущий» селектор). Таким образом, лучшее, что я могу сделать, это:
$ ('tr: not (: has (.bonus))')
$ ('tr + tr: has (.bonus)'). prev ()
Это все хорошо, кроме случаев, когда я использую live ()
для объекта jQuery, который был получен путем обхода, а не чистого выбора, т.е.
$('tr:has(.bonus)').prev().live('click', function() {
alert('hello');
});
Я получаю следующую ошибку:
неперехваченное исключение: синтаксическая ошибка, Я пробовал, и проблема:
Однако я не могу понять, как использовать селектор для выбора «элемента, за которым стоит определенный элемент» (т.е. «предыдущий» селектор). Таким образом, лучшее, что я могу сделать, это:
- Строки, которые не являются «бонусной строкой»:
$ ('tr: not (: has (.bonus))')
- Строки, в которых есть "бонусная строка" после них:
$ ('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
.Мои обходные пути
Для справки, мои обходные пути:
- Каким-то образом отметить строки, у которых есть «бонусная строка»;
- Привязать
щелчок
ко всем строкам, и проверим, есть ли после них в обработчике «бонусная строка».Но если я смогу получить «более приятное» решение, даже из любопытства на случай, если я столкнусь с этой проблемой в другой ситуации, Я бы оценил это.
Ура