2010-12-10 3 views
3

У меня есть таблица-строка, которая имеет действие 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 для кликов по ссылке?

Спасибо!

Update: Исходя из ответов, я в конечном счете включены следующие 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> 

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

Благодарим за помощь и помощь! :)

ответ

5

Если вы используете JQuery, это было бы так просто (предположим, что вы установили и идентификатор = «строка» для т.р. элемента и идентификатор = «ссылка» для элемента):

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

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

Без jQuery, это почти то же самое, но сначала вы должны получить дескриптор каждого элемента, а затем использовать метод addEventListener для присоединения прослушивателя событий (сделайте обработчик строк для использования пузырьков вместо захвата установив последний параметр в false), а затем ту же самую old event.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) 
+0

Спасибо! Я не использую jQuery для этого проекта, поэтому я использовал некоторый JavaScript, включенный в заключительный HTML, для выполнения этой задачи (см. Мой отредактированный вопрос выше). – Trevor

+0

@ Stephen, спасибо за то, что он стал яснее – unclenorton

Смежные вопросы