Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Клик по parent (https://javascript.ru/forum/events/54706-klik-po-parent.html)

Alexander Belov 28.03.2015 21:54

Клик по parent
 
Столкнулся со следующей задачей:
есть <table>-<tr>-<td>, внутри <td> есть <div>, внутри у <div> есть три <span> элемента.

Мне нужно, чтобы при клике на любое из содержимого <td> Javascript распознавал их как клик на сам <td>. По сути получается, на какой элемент кликаешь, тот и является target.

Пробовал в стилях прописать z-index с большим значением для <td> по отношению к его содержимому (<div>, <span>) . Не дало нужного результата.

Вот набросок, где функция показывает, по какому элементу был сделан click.
Прошу подсказать решение.

http://jsbin.com/mocajahalu/2/edit?html,css,js,output

рони 28.03.2015 22:05

Alexander Belov,
http://learn.javascript.ru/event-delegation

Alexander Belov 28.03.2015 22:22

рони,
благодарю за ссылку

+ Если кому-то интересно решение:
http://jsbin.com/tedasihino/1/edit?html,css,js,output

рони 28.03.2015 22:47

Alexander Belov,
решение по ссылке вы видимо вы не прочитали

Alexander Belov 28.03.2015 22:53

рони,
Пока только просмотрел. В пн буду разбираться с делегированием.

рони 28.03.2015 22:58

Alexander Belov,
если вы вложите ещё элемент то вам придётся добавлять ещё if - по ссылке решение для любой вложенности элементов

Alexander Belov 28.03.2015 23:09

рони,
Ради интереса проверил. Вроде бы, не обязательно if добавлять, можно просто дописать в уже существующее условие новый parent. Нвпример, мы добавили в <span> элемент <a>.
Тогда условие выглядит следующим образом:
document.addEventListener('click',function (e) {
var parentTarget = null;

if (e.target.tagName === "TD") {
parentTarget = e.target;
} else if (e.target.parentElement.tagName === "TD" || "span") {
parentTarget = e.target.parentElement;
}

alert(parentTarget);
e.preventDefault();
}, false);

рони 28.03.2015 23:46

Alexander Belov,
:(


Часовой пояс GMT +3, время: 08:22.