последовательность событий jquery bind - PullRequest
1 голос
/ 24 февраля 2012

РЕДАКТИРОВАТЬ: проблема в том, что я использовал .select () вместо .find ();

У меня есть этот простой код jquery (jsfiddle: http://jsfiddle.net/periklis/znstj/)

<div class = "someclass"><button class = "myclass">clickme</button></div>
<script>
$(document).ready(function() {
    $('.someclass').select('.myclass').bind('click', function() { console.log('red'); });    
    $('.myclass').bind('click', function() { console.log('green'); });
});
</script>

С какой стати «зеленый» всегда печатается перед «красным»? (И как бы я изменил его, чтобы «красный» отображался перед «зеленым»?)

Как всегда, заранее спасиболюди!

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

Как написано, ваш .select() вызов не используется - в jQuery он используется для регистрации обработчика для события onselect!

, поскольку .select() - это функция связывания, которая возвращает оригиналобъект, для которого он был вызван, в результате вы привязали первый обработчик click к внешнему .someclass div.

Поэтому вы видите эффект пузырьков , щелчок сначала нажимает на кнопку («зеленый»), а затем всплывает до его родителя («красный») в указанном порядке.

Если цель вашего вызова .select() состояла в привязкеобработчик первого клика только к кнопке, тогда вы должны были использовать .children('.myclass').

0 голосов
/ 24 февраля 2012

Вы можете связать свои собственные пользовательские функции:

$('.myclass').click(function(){ 
      $(this).trigger('green');
      $(this).trigger('red');
   })

$('.myclass').bind('green', function(e) {
   console.log('green');
});

...

НО, bind устарела в пользу .on() -> http://api.jquery.com/on/

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