jquery, предотвратите onclick = window.location на родительском элементе

StackOverflow https://stackoverflow.com/questions/820583

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top