2010-10-25 3 views
0

Я получил заявление делегата, который работает следующим образом:пытается добавить иерархии ограничений делегировать()

$("body").delegate("tr[type='option']",'mouseenter',function(){ 

Проблема заключается в том, что это захват элементов из таблиц я не хочу. Поэтому я пробовал:

$("body").delegate("table[class='ms-MenuUI'] > tr[type='option']",'mouseenter',function(){ 

Что не работает вообще (хотя я не получаю никаких ошибок в консоли). Просто интересно, как я могу затянуть это, так что это только захват строк таблицы из конкретной таблицы, которую я хочу.

ПРИМЕЧАНИЕ: таблица не существует в DOM при загрузке страницы и динамически создается/уничтожается после того, как документ готов, поэтому необходимо, чтобы делегат начал работу.

EDIT: В соответствии с моим комментарием ниже я использую [], потому что атрибут родителя является переменным, и я понимаю, что они должны работать взаимозаменяемо с атрибутом short-hand (то есть «.»). Типом динамического кода будет:

$('body').delegate('table[' + parentAttribType + "='" + parentAttribValue + "'] > tr[" + rowAttrbType + "='" + rowAttribValue + "']"), 'mouseenter', function(){ 

Спасибо!

ответ

1

Используйте это, обработчик события привязывается к таблице, используя «tr td» в качестве своей целевой цели.

$('table[class=ms-MenuUI]').delegate('tr td', 'mouseenter', function() { 

}); 

FYI -

Если вы собираетесь использовать $('body').delegate('',), то его, вероятно, лучше использовать .live(), который связывает обработчики событий на уровне документа в любом случае.

EDIT: Извините, не прочитал все ваше сообщение, делегируйте событие элементу, содержащему таблицу, или используйте .live().

+0

@John Никогда не лучше использовать 'live'. (1) У этого есть ужасный синтаксис, (2) для выполнения делегирования требуется дополнительный селектор. – lonesomeday

+0

похоже, что это правильное решение. Я не согласен с тем, что делегат всегда * лучше, чем вживую, - это вопрос конструктивных ограничений и потребностей в решении ... – patrickgamer

+0

Спасибо, Джон, я собираюсь продвинуться в прямом эфире() – patrickgamer

1

Вы должны использовать селектор класса . для классов, а не селектор атрибута []:

$("body").delegate("table.ms-MenuUI > tr[type='option']",'mouseenter',function(){ 

Кроме того, ваш браузер может быть о введении tbody элемента. Если можно, удалите >.

+0

Обязательно ли это? Мой образец жестко закодирован, но выбранный атрибут является динамическим и не всегда будет классом. Использование [] позволяет мне легко передавать тип атрибута в виде переменной в селекторе, а afaik - функциональность должна быть одинаковой. Я обновлю другой пример. – patrickgamer

+0

Да, это должно сработать, это просто уродливый синтаксис. Мне кажется, что проблема с телом может быть причиной вашей проблемы. – lonesomeday

0

Он должен работать:

$("table[class=ms-MenuUI] tr td").live('mouseenter',function(){ 
    /* yout code*/ 
}); 

Прямую, как затруднительное, но работает на DHTML.

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