Unbind не работает jquery

.unbind( [eventType ] [, handler(eventObject) ] )

Открепление обработчиков событий от элементов.

version added: 1.0 .unbind( [eventType ] [, handler(eventObject) ] )

eventType

Строка с названием JavaScript события. К примеру, click или submit.

handler(eventObject)

Функция, которая больше не должна запускаться.

version added: 1.4.3 .unbind( eventType, false )

eventType

Строка с названием JavaScript события. К примеру, click или submit.

false

Тип: Булево значение

Открепить функцию с содержанием ‘return false’, назначенную методом .bind( eventType, false ).

version added: 1.0 .unbind( event )

event

Обработчики событий, назначенные методом .bind() могут быть откреплены методом .unbind(). (Начиная с jQuery 1.7, для этих же целей, можно использовать методы .on() и .off()). Если вызвать данный метод без аргументов, то .unbind() открепит все обработчики:

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

В результате, от элемента с будут откреплены все обработчики события click. Для открепления конкретного обработчика того или иного события, воспользуйтесь вторым аргументом:

Таким образом, будет отключён только один конкретный обработчик. Вот следующий пример не сработает:

Несмотря на то, что данные две функции абсолютно идентичны, JavaScript не сможет определить какой обработчик нужно открепить.

Использование пространства имён

Так же мы можем указывать события в рамках определённого пространства имён. В этом случае, разделителем будет знак (.):

В обычном случае, мы можем без проблем открепить обработчик:

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

Так же, можем открепить обработчики определённого пространства имён вне зависимости от их типа:

Использование объекта события

Ещё один вариант использования метода .unbind(): к примеру, нам необходимо чтобы обработчик сработал только три раза:

В этом случае, внутри обработчика обращаемся к ключевом слову this и вызываем от него метод .unbind(). В данном примере всё зависит от значения переменной timesClic

Примеры

Пример: прикрепление и открепления обработки событий от цветной кнопки.

Пример: открепление обработчиков всех событий от параграфов:

Пример: открепление обработчиков кликов от параграфов:

Пример: Открепление конкретного обработчика, конкретного события:

Источник

jQuery unbind обработчик событий не работает

Я добавляю узлы (divs) в дерево DOM динамически и присоединяю прослушиватели событий через jQuery (либо делегированные, либо нет). Проблема в том, что я не могу отпереть этих слушателей, и, как результат, они накапливаются. Вот пример кода, я не могу найти ошибок:

Читайте также:  Как настроить электронные часы марки vst 5885

Теперь, если я перемещаю обработчик redoClick() вне обработчика doClick(), все работает нормально. Любая помощь будет оценена, так что я могу понять, почему.off() не работает.

Проблема не в «выключении», проблема в обработчике событий.

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

Если вы внесете его вне функции, он будет работать как и планировалось, другой вариант — удалить его:

Теперь, если я перемещаю обработчик redoClick() вне обработчика doClick(), все работает нормально.

Поскольку он был объявлен вне функции, поэтому.off может получить к нему доступ.

Но вот мой вопрос: как получилось() работает? Что мне здесь не хватает?

В первый раз, когда вы нажимаете, у вас будет обработчик, позволяющий произнести doClick # 1, сначала «off» попытается удалить doClick # 1 (не привязан), — тогда нажимается кнопка on, привязка doClick # 1. Во второй раз, когда он запустится, вы создадите doClick # 2, а выкл снова попытается удалить doClick # 2 — не найден, в то время как on добавит doClick # 2 (так что у вас будет # 1+ # 2 и так далее)

Источник

jQuery — функция unbind не работает

У меня есть этот код:

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

Когда страница только что загружена и ее ширина > 768 scrollHandler не привязана и это желательно. Когда я изменяю размер окна на 768, то обработчик все еще доступен (его не должно быть). Я попытался изменить код в блоке условий на $(‘.jquery’) .unbind(); таким образом, он удаляет каждое событие, привязанное к селектору, и тогда он работает нормально. Проблема в том, что у меня есть некоторые другие события щелчка, привязанные к этому элементу, поэтому я просто хочу удалить именно этот. Какие-нибудь улики?

4 ответа

Я испытываю какое-то странное поведение с .bind() и .unbind() в JQuery, хотя моя ситуация, по-видимому, идентична примеру, приведенному на сайте JQuery. В этом случае привязка / развязка применяется к вкладке JQuery (одной из многих). Когда вкладка нажата, она загружает действие контроллера через.

Итак, у меня есть такая функция, как function onLoadMe() < //stuff in function >И вторая функция function onLoadMeSecond() < //stuff in function >Я хочу попробовать привязать onLoadMe() на странице загрузки, но затем отвязать все в onLoadMe() и загрузить вторую функцию onLoadMeSecond() для.

Каждый раз , когда вы вызываете scrollToText , вы создаете новую функцию scrollHandler (объект) — поэтому, когда вы вызываете unbind(‘click’,scrollHandler) позже в том же вызове, что и недавно созданный scrollHandler , который не был привязан, поэтому его нельзя развязать (и вы потеряли ссылку на старый обработчик).

Определите scrollHandler вне определения scrollToText — вам нужно определить его только один раз — и rest вашего кода должен работать.

В другой заметке вы упоминаете, что несколько обработчиков событий связаны. Рассмотрите возможность использования пространств имен событий, таких как bind(‘click.myScrollHandler’,function()<. >) и более поздние unbind(‘click.myScrollHandler’) .

Читайте также:  Не работает печка вортекс тинго

Почему вы используете jquery? Media запросов очень легко справляется с этим.

Попробуй это. Извините за мой английский :/

Вызовите событие resizeMe in window resize:

Источник

.unbind() — удаление обработчика событий

.unbind() — удаляет обработчики событий, установленные на выбранных элементах методами .bind(), .one() или методами с узким назначением (click(), focus() и.т.д).

Метод имеет четыре варианта использования.

  • eventType — тип вызываемого события JavaScript, например click или submit ;
  • handler — функция, установленная в качестве обработчика, который необходимо удалить.
  • eventType — тип вызываемого события JavaScript, например click или submit ;
  • false — удаляет обработчики, которые были установлены методом .bind( eventType, false ) .
  • event — объект обрабатываемого события, переданный в обработчик.

Вызов метода без аргументов удалит у выбранных элементов обработчики всех событий.

Начиная с jQuery 3.0, метод .unbind() устарел. Он был заменен методом .off() с jQuery 1.7, поэтому его использование уже было лишним.

Пример 1

Удалим все обработчики у элемента с id равным foo.

Пример 2

У элемента с id равным foo открепим обработчик события click, указав его:

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

Пример 3

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

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

Использование пространства имен

Мы можем указывать события в рамках определённого пространства имён. Как сказано в описании работы метода .bind(), если строка eventType содержит (.), то событие связано с определённым пространством имён, а данный знак является разделителем.

Когда обработчик прикреплен таким образом, мы все равно можем открепить его следующим образом:

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

Мы также можем отключить все обработчики определённого пространства имён, независимо от типа события:

Особенно полезно связывать пространства имен с привязками событий, когда мы разрабатываем плагины или пишем код, который может взаимодействовать с другим кодом обработки событий в будущем.

Использование объекта события

Третья форма метода .unbind() используется, когда мы хотим отвязать обработчик внутри самого себя. Например, предположим, что мы хотим вызвать обработчик событий всего три раза:

В этом случае, внутри обработчика обращаемся к ключевом слову this и вызываем от него метод .unbind() . В данном примере всё зависит от значения переменной timesClicked .

Пример 4

Прикрепление и открепления обработки событий от цветной кнопки.

[codepen_embed height=»413″ theme_id=»0″ slug_hash=»rvOEPJ» default_tab=»js,result» user=»AmateR»]See the Pen rvOEPJ by Aleksei (@AmateR) on CodePen.[/codepen_embed]

Читайте также:  Вор джоулей не работает

Источник

.unbind()

.unbind( eventType [, handler ] ) Returns: jQuery version deprecated: 3.0

Description: Remove a previously-attached event handler from the elements.

version added: 1.0 .unbind( eventType [, handler ] )

version added: 1.4.3 .unbind( eventType, false )

version added: 1.0 .unbind( event )

version added: 1.0 .unbind()

As of jQuery 3.0, .unbind() has been deprecated. It was superseded by the .off() method since jQuery 1.7, so its use was already discouraged.

Event handlers attached with .bind() can be removed with .unbind() . In the simplest case, with no arguments, .unbind() removes all handlers attached to the elements:

This version removes the handlers regardless of type. To be more precise, we can pass an event type:

By specifying the click event type, only handlers for that event type will be unbound. This approach can still have negative ramifications if other scripts might be attaching behaviors to the same element, however. Robust and extensible applications typically demand the two-argument version for this reason:

By naming the handler, we can be assured that no other functions are accidentally removed. Note that the following will not work:

Even though the two functions are identical in content, they are created separately and so JavaScript is free to keep them as distinct function objects. To unbind a particular handler, we need a reference to that function and not a different one that happens to do the same thing.

Note: Using a proxied function to unbind an event on an element will unbind all proxied functions on that element, as the same proxy function is used for all proxied events. To allow unbinding a specific event, use unique class names on the event (e.g. click.proxy1 , click.proxy2 ) when attaching them.

Using Namespaces

Instead of maintaining references to handlers in order to unbind them, we can namespace the events and use this capability to narrow the scope of our unbinding actions. As shown in the discussion for the .bind() method, namespaces are defined by using a period ( . ) character when binding a handler:

When a handler is bound in this fashion, we can still unbind it the normal way:

However, if we want to avoid affecting other handlers, we can be more specific:

We can also unbind all of the handlers in a namespace, regardless of event type:

It is particularly useful to attach namespaces to event bindings when we are developing plug-ins or otherwise writing code that may interact with other event-handling code in the future.

Using the Event Object

The third form of the .unbind() method is used when we wish to unbind a handler from within itself. For example, suppose we wish to trigger an event handler only three times:

Источник

Оцените статью