JQuery несколько связывает - PullRequest
2 голосов
/ 13 июля 2011

товарищи по кодированию, при условии, что у меня есть кнопка с обработчиком кликов, например:

$("#save-item-btn").click(function() { saveItemDialogData(true); });  

если тот же код будет выполнен снова, сможет ли jquery это понять, очистить предыдущую привязку и повторно применить ее, или она потребит ресурсы или вызовет ненужные побочные эффекты?

спасибо

Ответы [ 4 ]

4 голосов
/ 13 июля 2011

Если функция связана дважды, функция будет добавлена ​​дважды и будет выполняться дважды при каждом событии щелчка.

Если вам нужно убедиться, что вы не связываете функцию 100 раз, отсоедините функцию перед повторным связыванием:

$("#save-item-btn").unbind('click', doSave).click(doSave);

function doSave()
{
  saveItemDialogData(true);
}
3 голосов
/ 13 июля 2011

Если этот код будет выполнен снова, новая функция будет добавлена ​​в очередь кликов.Как заметил @Faisal, вы можете вызвать unbind, чтобы удалить обработчик, но он может удалить полезные обработчики из других частей приложения, поэтому вам, вероятно, следует использовать пространства имен обработчиков, например:

$(selector).unbind('click.mynamespace');
$(selector).bind('click.mynamespace', myhandler);

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

3 голосов
/ 13 июля 2011

Каждый раз, когда вы вызываете click (), он связывает функцию, которую вы передаете этому обработчику, - он не может сказать, что функция та же самая. Если вы хотите быть уверенными в том, что на вашей кнопке нет предыдущих обработчиков щелчков, сначала вызовите unbind ('click') для нее, а затем прикрепите обработчики щелчков.

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

2 голосов
/ 13 июля 2011

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

Вы можете использовать unbind для отсоединения предыдущих обработчиков.Предпочтительно использовать события пространства имен, как описано здесь: http://docs.jquery.com/Namespaced_Events.

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