.unbind( eventType [, handler ] )Возвращает: jQueryверсия устарела: 3.0
Описание: Удаляет ранее прикрепленный обработчик событий из элементов.
-
версия добавлена: 1.0.unbind( eventType [, handler ] )
- eventTypeТип: СтрокаСтрока, содержащая один или несколько типов событий DOM, таких как "click" или "submit", или имена пользовательских событий.
- handlerФункция, которая больше не должна выполняться.
-
-
версия добавлена: 1.4.3.unbind( eventType, false )
-
версия добавлена: 1.0.unbind( event )
- eventТип: EventОбъект
jQuery.Event.
-
-
версия добавлена: 1.0.unbind()
- Эта сигнатура не принимает аргументов.
Начиная с jQuery 3.0, .unbind() устарела. Она была заменена методом .off() с jQuery 1.7, поэтому ее использование уже не рекомендуется.
Обработчики событий, прикрепленные с помощью .bind() могут быть удалены с помощью .unbind(). В самом простом случае, без аргументов, .unbind() удаляет все прикрепленные обработчики к элементам:
$( "#foo" ).unbind();
Эта версия удаляет обработчики независимо от типа. Для большей точности, мы можем передать тип события:
$( "#foo").unbind( "click" );
Указав тип события click, будут отвязаны только обработчики для этого типа события. Однако такой подход может повлечь негативные последствия, если другие скрипты прикрепляют функции к тому же элементу. Надежные и расширяемые приложения обычно требуют двухаргументной версии по этой причине:
var handler = function() {
alert( "The quick brown fox jumps over the lazy dog." );
};
$( "#foo" ).bind( "click", handler );
$( "#foo" ).unbind( "click", handler ); Называя обработчик, мы можем быть уверены, что случайно не удаляются другие функции. Обратите внимание, что следующее не будет работать:
$( "#foo" ).bind( "click", function() {
alert( "The quick brown fox jumps over the lazy dog." );
});
// Will NOT work
$( "#foo" ).unbind( "click", function() {
alert( "The quick brown fox jumps over the lazy dog." );
}); Несмотря на то, что эти две функции идентичны по содержанию, они создаются отдельно, поэтому JavaScript свободен держать их как отдельные объекты функций. Чтобы отвязать конкретный обработчик, нам нужна ссылка на эту функцию, а не на другую, которая выполняет то же самое.
Примечание: Использование прокси-функции для отвязки события от элемента приведет к отвязке всех прокси-функций от этого элемента, так как одна и та же прокси-функция используется для всех прокси-событий. Чтобы разрешить отвязку определенного события, используйте уникальные имена классов для события (например, click.proxy1, click.proxy2) при их прикреплении.
Использование пространств имен
Вместо поддержания ссылок на обработчики для их отвязки, мы можем использовать пространства имен для событий и использовать эту возможность для сужения области наших действий по отвязке. Как показано в обсуждении метода .bind(), пространства имен определяются с помощью точки (.) при прикреплении обработчика:
$( "#foo" ).bind( "click.myEvents", handler );
Когда обработчик прикреплен таким образом, мы все равно можем отвязать его обычным способом:
$( "#foo" ).unbind( "click" );
Однако, если мы хотим избежать воздействия на другие обработчики, мы можем быть более конкретными:
$( "#foo" ).unbind( "click.myEvents" );
Мы также можем отвязать все обработчики в пространстве имен, независимо от типа события:
$( "#foo" ).unbind( ".myEvents" );
Это особенно полезно для прикрепления пространств имен к связываниям событий, когда мы разрабатываем плагины или по другим причинам пишем код, который может взаимодействовать с другим кодом обработки событий в будущем.
Использование объекта события
Третья форма метода .unbind() используется, когда мы хотим отвязать обработчик изнутри самого себя. Например, предположим, что мы хотим запустить обработчик событий только три раза:
var timesClicked = 0;
$( "#foo" ).bind( "click", function( event ) {
alert( "The quick brown fox jumps over the lazy dog." );
timesClicked++;
if ( timesClicked >= 3 ) {
$( this ).unbind( event );
}
}); Обработчик в этом случае должен принимать параметр, чтобы мы могли получить объект события и использовать его для отвязки обработчика после третьего щелчка. Объект события содержит контекст, необходимый для .unbind() для определения того, какой обработчик удалить. Этот пример также является иллюстрацией закрытия. Поскольку обработчик ссылается на переменную timesClicked, которая определена вне функции, увеличение переменной оказывает влияние даже между вызовами обработчика.
Примеры:
Можно привязать и отвязать события от цветной кнопки.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>unbind demo</title>
<style>
button {
margin: 5px;
}
button#theone {
color: red;
background: yellow;
}
</style>
<script src="https://code.jquery.com/jquery-3.7.0.js"></script>
</head>
<body>
<button id="theone">Does nothing...</button>
<button id="bind">Bind Click</button>
<button id="unbind">Unbind Click</button>
<div style="display:none;">Click!</div>
<script>
function aClick() {
$( "div" ).show().fadeOut( "slow" );
}
$( "#bind" ).on( "click", function() {
$( "#theone" )
.bind( "click", aClick )
.text( "Can Click!" );
});
$( "#unbind" ).on( "click", function() {
$( "#theone" )
.unbind( "click", aClick )
.text( "Does nothing..." );
});
</script>
</body>
</html> Демо:
Чтобы отвязать все события от всех абзацев, напишите:
$( "p" ).unbind();
Чтобы отвязать все события клика от всех абзацев, напишите:
$( "p" ).unbind( "click" );
Чтобы отвязать только один ранее привязанный обработчик, передайте функцию в качестве второго аргумента:
var foo = function() {
// Code to handle some kind of event
};
$( "p" ).bind( "click", foo ); // ... Now foo will be called when paragraphs are clicked ...
$( "p" ).unbind( "click", foo ); // ... foo will no longer be called.