2012-06-14 4 views
0

Я только что начал с пузырьков событий в jQuery, поэтому мое понимание очень ограничено. У меня есть требование обрабатывать все события, которые происходят в строке/ячейке таблицы (таблицы) html на уровне родительского контейнера. Пример: 1. Когда пользователь нажимает на строку, я хочу вместо привязки события клика к каждому привязывать его к родительскому. 2. Когда пользователь наводится на ячейку, я хочу показать всплывающую подсказку, то есть нужно установить атрибут title в текстовый элемент ячейки. Мне тоже нужно пузырить это событие.дескриптор события jQuery, пузырящийся при наведении указателя на ячейку

Я могу решить первую часть моего требования. Вот код для части 1 (jsFiddle добавлен ниже):

$('#grid').click(function(evt) { 
    var row = $(evt.target).parent('tr'); // Get the parent row 
    var cell= $(evt.target); //Get the cell 
    alert('Row data: ' + row.text()); 
    alert('Cell data: ' + cell.text()); 
}); 

Я думал, что это было бы просто реализовать парить тоже. Но я не могу уловить ценность отдельной ячейки. Вот мой пример кода в скрипте jsFiddle: sample code to bubble the event on cell hover

также, я заметил, что дважды вижу предупреждение при наведении указателя мыши. Думаю, он поднимает событие один раз для ячейки, а затем для строки/таблицы. Не уверен?

+0

Не могу ответить на ваш вопрос полностью, но вы хотите 'mouseover' вместо' hover'. – sachleen

+0

@sachleen, изменяя его на mouseover, показывает значение ячейки, но сначала показывает весь контент таблицы, а затем показывает значение ячейки. Могу ли я ограничить его, чтобы вернуть значение ячейки? –

+0

Это потому, что он тоже парит над столом. Вы хотите сделать то, что предложил joshatjben, но вот рабочая версия: http://jsfiddle.net/3xp7Q/3/ – sachleen

ответ

3

Вы можете $.on, чтобы достичь этого, как показано ниже. Начиная с jQuery 1.7, все вызовы .live(), .bind(), '.delegate()' используют .on() под капотом. И .on связывает событие только с номером #grid и перехватывает событие на этом элементе, а затем проверяет, соответствует ли цель второму селектору. Если это так, выполните функцию.

$('#grid').on('mouseenter','td', function(){ 
     console.log($(this).text()); 
    });​ 

Working Fiddle

+0

Ничего себе, я никогда не замечал флажок «Firebug Lite». Так удобно! Не нужно возиться с позиционированием окна инструментов Chrome dev, чтобы он не мешал. – sachleen

+0

@ sachleen, да, это очень удобно. Но доступно только при выборе 'jQuery (edge)' в качестве библиотеки/рамки. –

+0

Тот же вопрос, как эта реализация отличается от той, которую я опубликовал? Я имею в виду, как событие click с делегатом отличается от кода события, который у меня есть в исходном сообщении? Мне тоже нравится jQuery edge - спасибо, что показали это нам :) –