Как использовать event.stopPropagation () в делегате () - PullRequest
1 голос
/ 05 марта 2011

Мой код похож на следующий в html:

<li class="arrow">    
    <div>
        <a href="javascript:void(0);" class="anchor">remove</a> 
    </div>                      
</li>

И я связываю свои элементы с помощью метода jquery deligate () (поскольку элементы появляются динамически)

$obj.delegate(".arrow", "click", function() {
    alert("clicked on arrow");
});

$obj.delegate(".anchor", "click", function(event) {
     event.stopPropagation();
     alert("anchor clicked");
});

Моя проблема вкогда я нажимаю «.anchor», то происходит оба события.Может кто-нибудь сказать мне, как использовать event.stopPropagation () в этом контексте?Я пытался как выше, но не работает.Есть ли другой способ сделать это?

РЕДАКТИРОВАТЬ: Я пытался вызвать event.isPropagationStopped (), и он возвращает true.но все же оба события называются.

Ответы [ 2 ]

4 голосов
/ 05 марта 2011

Существуют ограничения при использовании delegate или live и stopPropagation.

Вы возвращаете false в своем обработчике, чтобы предотвратить как eventPropagation, так и default

Попробуйте

$obj.delegate(".anchor", "click", function(event) {
     alert("anchor clicked");
     return false;
});
1 голос
/ 05 марта 2011

Насколько я понимаю, с .delegate и .live вам нужно return false. Я считаю, что это связано с тем, как событие прикреплено - не к элементу, а к его предку.

Вот пример: http://jsfiddle.net/G3k8Z/

...