2012-05-09 2 views
0

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

$('.list_row_inputtype').on('click',function(event) { 

    $(this).find('a.link_to_fire').click(); 
    event.stopPropagation(); 

    return false; 
}); 


<div class="list_row_input_type unread"> 
    <a href="#" onclick="toogleRead(); return false;" class="toogleRead"></a> 
    <a href="{corePath}/mails" class="link_to_fire">{emailLink}</a> 
    <div class="description"></div> 
</div> 

Когда я нажимаю на «.toogleRead» это огонь функцию, но изменить к {} CorePath страница/письма с. Я хочу предотвратить его изменение страницы.

ответ

0

Не могли бы вы разместить событие clent на a? Теперь вам не придется беспокоиться о распространении событий.

$('.list_row_input_type.unread a.toggleRead').click(function(e) { 
    e.preventDefault(); 
    toggleRead(); 
}); 
1

Вы должны добавить обработчик событий на .toogleRead элемента с помощью JQuery тоже. Легче запомнить, где привязан обработчик, он не смешивает два способа работы и не добавляет лучшего разделения между HTML и Javascript.

Работает демо-версия http://jsfiddle.net/pomeh/uFV9R/.

HTML код

<div class="list_row_input_type unread"> 
    <a href="#" class="toogleRead"></a> 
    <a href="{corePath}/mails" class="link_to_fire">{emailLink}</a> 
    <div class="description"></div> 
</div> 

Javascript код

$('.list_row_input_type').on('click',function(event) { 
    event.stopPropagation(); 
    // your stuff 
}); 

$('a.toogleRead').on('click',function(event) { 
    event.stopPropagation(); 
}); 

Еще один момент, возвращая ложное из обработчика событий с помощью JQuery, в большинстве случаев, считается плохой практикой. Он делает слишком много вещей, где обычно вы хотите сделать только один из них. Вот две ссылки, объясняющие это подробно http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/ и http://css-tricks.com/return-false-and-prevent-default/.

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