Вопрос по jQuery bind () - PullRequest
       7

Вопрос по jQuery bind ()

1 голос
/ 23 августа 2011

У меня есть вопрос, касающийся работы jQuery bind. Всякий раз, когда мы используем метод bind для любого элемента и пишем некоторый код обратного вызова, выполняется ли полный код для события bind «каждый раз» ИЛИ jQuery только запоминает вывод / результат этого кода и выполняет только этот результат ..

Также можем ли мы сгенерировать другое событие внутри кода обратного вызова?

Например, как это работает?

Ответы [ 3 ]

1 голос
/ 23 августа 2011

функция обратного вызова оценивается с нуля для каждого события здесь:

http://jsfiddle.net/turaaa/wxBF4/

вы можете видеть, что каждый щелчок генерирует различный результат.

и да, выможет легко сгенерировать другое событие внутри обратного вызова

1 голос
/ 23 августа 2011

Каждый раз, когда запускается событие, выполняются все функции, связанные с событием в указанной цели.Возвращаемые значения для этих функций обратного вызова используются для определения, должно ли событие продолжать распространяться.

Существует несколько существенных различий между функцией, вызываемой как часть сценария, и обратным вызовом события:

  1. jQuery нормализует обратный вызов, чтобы он выполнялся в контексте связанной цели (т. Е. this относится к связанному элементу, которому было назначено событие)
  2. параметры обратного вызова предоставляются автоматически
  3. события выполняются асинхронно при запуске события, поэтому могут быть некоторые непреднамеренные последствия со значениями переменных (индексы цикла, такие как i, могут иметь свое окончательное значение к моменту вызова обратного вызова)

Поскольку обратные вызовы - это просто функции, они могут делать все, что может делать любая другая функция, включая вызов trigger.Будьте осторожны, чтобы не создавать себе бесконечный цикл с рекурсивными вызовами функций для одного и того же события.

Вы не захотите вызывать:

function foo()
{
  foo();
}

Аналогично, вы не захотитеЗвоните:

$('#foo').click(function(){
  //short form for .trigger('click')
  $(this).click();
});
0 голосов
/ 23 августа 2011

Вы можете легко создать другое событие с помощью .trigger ().

Редактировать : После прочтения и перечитывания первого вопроса.Я думаю, что ответ, который вы ищете, заключается в том, что bind () выполняется каждый раз .Однако в ситуации, когда код обратного вызова изменяет DOM, возможно добавление элемента, когда событие в этом элементе не будет связано.

Рассмотрим код, который добавляет кнопку <input id="mybutton" type="button"....Если вы используете $("#mybutton").bind("click") во всем своем коде, у этого нового элемента не будет связанных событий.Чтобы «щелкнуть», чтобы что-то сделать, вам нужно либо связать это ПОСЛЕ того, чтобы оно было добавлено в DOM, либо использовать .live () или .delegate () вместо .bind ().

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