jquery, предотвратите onclick = window.location на родительском элементе
-
03-07-2019 - |
Вопрос
У меня есть таблица с такими данными:
<table>
<tr onclick="window.location='download.php?id=1'">
<td>Program 1<br/>Short Description 1 (<a onclick="$.popup.show('Install Instructions', 'Instructions pulled from DB here')">Instructions</a>)</td>
<td>Added by user and date/time here<td>
<td>Filesize here<td>
<td><a href="edit.php?id=1">Edit</a> - <a href="delete.php?id=1">Delete</a><td>
</tr>
(repeat TRs for more programs pulled from DB)
</table>
У меня проблема в том, что при нажатии на ссылку (Инструкции) должно появиться окно с инструкциями. Он делает это, но также запускает щелчок TR. Таким образом, я получаю всплывающее окно на долю секунды, а затем оно переходит к download.php.
Могу ли я как-нибудь помешать запуску ТР? Желательно использовать jquery, но я тоже не против простых решений javascript.
Решение
Как правило, вам нужно остановить распространение событий , используя event.cancelBubble ( для IE) или event.stopPropagation () (для всех остальных). решение, данное из quirksmode (которое я использовал ранее), заключается в как то так:
<script type="text/javascript">
var instructions = function(e) {
// Get the correct event in a cross-browser manner, then stop bubbling/propagation.
if (!e) var e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
// Do what you want now
$.popup.show('Install Instructions', 'Instructions pulled from DB here');
}
</script>
Тогда ваш скрипт будет называть это так:
<td>Program 1<br/>Short Description 1 (<a onclick="instructions(event)">Instructions</a>)</td>
(Конечно, вы можете поместить все это в строку, но это чертовски беспорядок.)
Вы также можете найти этот вопрос освещающим . р>
Другие советы
stopPropogation - это то, что вам нужно.
http://docs.jquery.com/Events/jQuery .Event # event.stopPropagation.28.29
Вы можете написать
onclick="false"
и добавьте события, используя модель событий уровня 2 (attachEvent в ie или addEventListener в других браузерах). Вы также можете jquery bind ('click'), если вы используете jquery.