как игнорировать первое событие и перейти ко второму? - PullRequest
3 голосов
/ 11 декабря 2010

У меня есть строка таблицы, в которой действие Javascript прикреплено к щелчкам мыши в любом месте строки таблицы:

<tr onmousedown="someAction(this)">
    <td>cell 1</td>
    <td>cell 2</td>
    <td><a href="page2.html">cell 3</a></td>
</tr>

Если пользователь щелкает в любом месте строки, я хочу действие Javascript, someAction (это), чтобы следовать.Однако если пользователь щелкает ссылку на страницу 2, то я хочу, чтобы действие игнорировалось, а ссылка следовала.

К сожалению, сначала наблюдается действие, которое перемещает позицию связанного текста как раз длянажмите, чтобы быть сброшенным.Другими словами, пользователь в действительности не может щелкнуть ссылку и перейти на страницу 2. В этом случае

Как отключить действие mousedown для кликов по ссылке?

Спасибо!

Обновление: Основываясь на ответах, я в конечном счете включил следующий JavaScript в конец HTML, который зарегистрировал обработчик событий, чтобы остановить распространение, как это было предложено, например:

...
<script type="text/javascript" language="javascript">
//<![CDATA[
function stopEvent(ev) {
    ev.stopPropagation();
}
var links = document.getElementsByTagName('a');
for (var i = 0; i < links.length; i++) {
    links[i].addEventListener("onmousedown", stopEvent, false);
}
//]]>
</html>

Это могло бы быть легко включено в событие загрузки документа, но раздел CDATA уже был необходим по другим причинам, поэтому я добавил сюда то, что мне было нужно.

Спасибо за помощь и хорошие предложения!:)

Ответы [ 2 ]

5 голосов
/ 11 декабря 2010

Если бы вы использовали jQuery, это было бы так просто (предположим, что вы установили id и 'row' для элемента tr, а id = 'link' для элемента):

$('#row').click(someaction);
$('#link').click(function(event){event.stopPropagation()});

Вы можете посмотреть на этот пример: http://jsfiddle.net/VDQMm/

Без jQuery это почти то же самое, но вы должны сначала получить дескриптор каждого элемента, а затем использовать метод addEventListener, чтобы присоединить прослушиватель событий (заставьте обработчик строк использовать всплывающее окно вместо захвата, задав для последнего параметра значение false) и то же самое старое событие.stopPropagation ().

Было бы что-то вроде этого (http://jsfiddle.net/VDQMm/2):

var row = document.getElementById('row');
var link = document.getElementById('link');
row.addEventListener('click',alert('clicked row!'),false)
link.addEventListener('click',function(event){event.stopPropagation()},false)
1 голос
/ 11 декабря 2010

Добавьте event.stopPropagation() к событию mousedown ссылки.Это предотвратит всплеск события до tr.

Вот пример .

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