Просмотр полной версии : onclick - пересечение событий.
LRCenter
16.03.2011, 09:39
Есть таблица состоящая из большого числа строк, при клике на строку срабатывает функция изменяющая цвет ее фона.
Проблема в том что если в строке есть гипперссылка, открывающая изображение в отдельном окне, то при клике по ней, помимо открытия окна с картинкой, строка помечается. Как избежать срабатывания события onclick, при нажатии на активные элементы внутри?
<tr id='1' onclick="lineon('1');">
<td><a href='../media//den.jpg' target="_blank">den.jpg</a></td>
<td>10.03.2011|<b>12:36</b></td>
</tr>
var target = event.target || event.srcElement;
if (target != this) return;
Добавить в onclick строки таблицы в начало.
LRCenter
16.03.2011, 10:14
Сделал. Все работает так же.
<tr id='1' onclick="var target = event.target || event.srcElement; if(target != this) return lineon('1');">
LRCenter
16.03.2011, 11:10
Как же сделать-то? Может перебить событие в строке другим событием в ячейке со ссылкой?
розовый слоник
16.03.2011, 11:46
можно сделать костыль:)
при клике по ссылки возвращать таблице те стили что по дефолту:)
только проверьте дебагером, что происходит раньше клик по ссылке или изменение цвета у таблицы
LRCenter
16.03.2011, 12:37
Да, ну нафиг. Проще вообще тогда не делать выделение при клике :)
Сделал. Все работает так же.
Ты не поставил точку с запятой.
Копируй мой код полностью.
Должно быть return; lineon() — т. е. return прерывает выполнение функции, записанной в onclick и lineon уже не вызывается.
LRCenter
16.03.2011, 13:29
Пробовал и так - код вообще перестает работать.
Кликни сначала по ссылке, а потом по блоку.
<html>
<body>
<div style='background: #CCCCCC; width: 200px; height: 200px' onclick='var target = event.target || events.srcElement; if (event.target != this) return; this.style.backgroundColor = "red";'>
<a href='javascript://'>
Click
</a>
</div>
</body>
</html>
LRCenter
16.03.2011, 14:05
Ага, это работает, но только с div-ом, а не с <tr> :)
А какая разница, TR или DIV?
LRCenter
16.03.2011, 14:32
<div style='background: #CCCCCC; width: 200px; height: 200px' onclick='var target = event.target || events.srcElement; if (event.target != this) return; this.style.backgroundColor = "red";'>
<a href='javascript://'>Click</a></div>
<table width=100% bgcolor='#ebebeb' border=1>
<tr onclick='var target = event.target || events.srcElement; if (event.target != this) return; this.style.backgroundColor = "red";'>
<td>text</td>
<td id=tt onclick="null"><a href='pict.jpg' target="_blank">pict.jpg</a></td>
</tr>
</table>
LRCenter
16.03.2011, 14:33
Попробуйте сами. Вероятно какие-то нюансы в DOM.
С div работает, с tr вообще никак.
Клик не может быть совершён по TR, только по TD.
<table width=100% border=1>
<tr style='background: red' onclick='if (event.target.tagName != "TD") return; this.style.backgroundColor = "black";'>
<td>text</td>
<td id=tt><a href='javascript://'>pict.jpg</a></td>
</tr>
</table>
LRCenter
16.03.2011, 15:10
Matre,
Вот в чем проблема, оказывается была!
Спасибо, уважаемый.
Очень помогли.
LRCenter
16.03.2011, 15:14
К сожалению, по техническим причинам не могу добавить вам кармы, у меня глючит форум - при попытке сделать это вылетает алерт:
"Вы должны добавить отзыв кому-то ещё, прежде чем сможете снова добавить его Matre."
И так со всеми, а не только с вами. :(
Так повысьте прямым POST-запросом.
Неплохая практика для освоения AJAX.
LRCenter
16.03.2011, 15:20
А как сделать прямой POST-запрос? GET, понятно, как. А POST?
И какой должен быть запрос?
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot