jquery, предотвратите onclick = window.location на родительском элементе - PullRequest
1 голос
/ 04 мая 2009

У меня есть таблица с такими данными:

<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.

Ответы [ 3 ]

3 голосов
/ 04 мая 2009

По сути, вам нужно остановить распространение событий , используя 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>

(Конечно, вы могли бы все это встроить, но это кровавый беспорядок.)

Вы также можете найти этот вопрос осветительным.

0 голосов
/ 04 мая 2009

Вы можете написать

onclick="false"

и добавление событий с использованием модели событий уровня 2 (attachEvent в ie или addEventListener в других браузерах). Вы также можете jquery bind ('click'), если вы используете jquery.

0 голосов
/ 04 мая 2009

stopPropogation - это то, что вам нужно.

http://docs.jquery.com/Events/jQuery.Event#event.stopPropagation.28.29

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...