2012-05-09 7 views
0

Как остановить вызовы родительских связей?Как остановить реверсивное распространение ссылки с помощью JQuery

Пример:

<div id="test"> 
    <a href="#" id="link" onclick="alert('testing')">TEST</a> 
</div> 
$('#test').on('click',function(){ 
    alert('I dont want it to fire it up!');   
}) 

Я просто хочу, чтобы огонь OnClick в #Link, а не событие на #test, если я нажму на #Link

спасибо за ваши ответы

ответ

2

использование stopPropagation

event.stopPropagation(); 
+0

inline-обработчик не использует jquery, и поэтому это не работает, т.е. – Esailija

+0

stopPropagation действителен javascript в современных браузерах, независимо от jQuery. –

+0

@JeremyLawson Я сказал, то есть не современный браузер, хотя – Esailija

0

stopPropagation() предотвращает распространение события. Однако вы должны передать событие в обработчик событий, чтобы сделать это.

$('#test').on('click',function(e){ 
    e.stopPropagation(); 
}) 
+0

+1 ohhh cool! :) ** ... ** – gdoron

+0

@gdoron: Подождите, что? Я обнаруживаю намек на сарказм? :) –

+0

Я просто дразня вас ... :) лучший ответ. 'return false' действительно должен использоваться только тогда, когда это необходимо. – gdoron

1

Выполнение return false в обработчике событий предотвратит распространение. К сожалению, это также предотвратит поведение ссылки по умолчанию; например в вашем случае загрузка <page url here>#:

<a href="#" id="link" onclick="alert('testing'); return false;">TEST</a> 

Edit

Объект jQuery.event содержит интересное свойство под названием target, который, в случае ым случае, будет содержать элемент, который получил фактический щелчок. Вы можете использовать его, если это имеет смысл:

$('#test').on('click', function(e) { 
    if ($(e.target).is("#link")) { 
     alert('#link was clicked; comment out this alert to ignore it'); 
    } 
    else { 
     alert('you clicked me but you did not click #link'); 
    } 
}); 

fiddle

Кстати, мне интересно, если есть основания для смешивания инлайн и unobstructive обработчиков событий?

+0

Остановить неправильное использование 'return false;' http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/ –

+1

Вы также предотвращаете дефолт. – gdoron

+0

@gdoron у вас есть точно такой же ответ ... также это ссылка с href из '#', здесь действительно требуется defDefault – Esailija

0

stopPropagation() - действительная функция javascript как внутри, так и вне jQuery. jQuery помогает поддерживать IE, но вы также можете просто использовать cancelBubble для поддержки IE.

document.getElementById('link').onclick = function(e) { 
    if (e && e.stopPropagation) e.stopPropagation(); else window.event.cancelBubble = true; 
}