onclick - пересечение событий.
Есть таблица состоящая из большого числа строк, при клике на строку срабатывает функция изменяющая цвет ее фона.
Проблема в том что если в строке есть гипперссылка, открывающая изображение в отдельном окне, то при клике по ней, помимо открытия окна с картинкой, строка помечается. Как избежать срабатывания события 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 строки таблицы в начало. |
Сделал. Все работает так же.
<tr id='1' onclick="var target = event.target || event.srcElement; if(target != this) return lineon('1');"> |
Как же сделать-то? Может перебить событие в строке другим событием в ячейке со ссылкой?
|
можно сделать костыль:)
при клике по ссылки возвращать таблице те стили что по дефолту:) только проверьте дебагером, что происходит раньше клик по ссылке или изменение цвета у таблицы |
Да, ну нафиг. Проще вообще тогда не делать выделение при клике :)
|
Цитата:
Копируй мой код полностью. Должно быть return; lineon() — т. е. return прерывает выполнение функции, записанной в onclick и lineon уже не вызывается. |
Пробовал и так - код вообще перестает работать.
|
Кликни сначала по ссылке, а потом по блоку.
<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> |
Ага, это работает, но только с div-ом, а не с <tr> :)
|
А какая разница, TR или DIV?
|
<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> |
Попробуйте сами. Вероятно какие-то нюансы в 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> |
Matre,
Вот в чем проблема, оказывается была! Спасибо, уважаемый. Очень помогли. |
К сожалению, по техническим причинам не могу добавить вам кармы, у меня глючит форум - при попытке сделать это вылетает алерт:
"Вы должны добавить отзыв кому-то ещё, прежде чем сможете снова добавить его Matre." И так со всеми, а не только с вами. :( |
Так повысьте прямым POST-запросом.
Неплохая практика для освоения AJAX. |
А как сделать прямой POST-запрос? GET, понятно, как. А POST?
И какой должен быть запрос? |
Часовой пояс GMT +3, время: 11:44. |