Spec-Zone.ru › jQuery

.bind()

.bind( eventType [, eventData ], handler )Возвращает: jQueryверсия устаревшая: 3.0

Описание: Присоединяет обработчик события к элементам.

  • версия добавлена: 1.0.bind( eventType [, eventData ], handler )

    • eventType
      Тип: Строка
      Строка, содержащая один или несколько типов событий DOM, таких как "click" или "submit", или имена пользовательских событий.
    • eventData
      Тип: Любой тип
      Объект, содержащий данные, которые будут переданы обработчику события.
    • handler
      Тип: Функция( Event eventObject )
      Функция, которая выполняется каждый раз при срабатывании события.
  • версия добавлена: 1.4.3.bind( eventType [, eventData ] [, preventBubble ] )

    • eventType
      Тип: Строка
      Строка, содержащая один или несколько типов событий DOM, таких как "click" или "submit", или имена пользовательских событий.
    • eventData
      Тип: Любой тип
      Объект, содержащий данные, которые будут переданы обработчику события.
    • preventBubble
      Тип: Булево
      Установка третьего аргумента в false присоединит функцию, которая предотвращает выполнение стандартного действия и предотвращает распространение события. По умолчанию значение true.
  • версия добавлена: 1.4.bind( events )

    • events
      Тип: Объект
      Объект, содержащий один или несколько типов событий DOM и функций, которые нужно выполнить для них.

Начиная с jQuery 3.0, .bind() устарела. Она была заменена методом .on() для привязки обработчиков событий к документу начиная с jQuery 1.7, поэтому её использование уже не рекомендуется. Для более ранних версий метод .bind() используется для привязки обработчика события непосредственно к элементам. Обработчики привязываются к текущим выбранным элементам в объекте jQuery, поэтому эти элементы должны существовать в момент вызова .bind(). Для более гибкой привязки событий см. обсуждение делегирования событий в .on().

Любая строка допустима для eventType; если строка не является именем встроенного события DOM, то обработчик привязывается к пользовательскому событию. Эти события никогда не вызываются браузером, но могут быть инициированы вручную из другого JavaScript-кода с помощью .trigger() или .triggerHandler().

Если строка eventType содержит точку (.) символ, то событие имеет пространство имён. Точка отделяет событие от его пространства имён. Например, в вызове .bind( "click.name", handler ), строка click является типом события, а строка name является пространством имён. Использование пространств имён позволяет отвязывать или инициировать определённые события одного типа без влияния на другие. См. обсуждение .unbind() для получения дополнительной информации.

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

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

Пример использования .bind():

$( "#foo" ).bind( "click", function() {
  alert( "User clicked on 'foo.'" );
});

Этот код заставит элемент с ID foo реагировать на событие click. При нажатии пользователем внутри этого элемента в дальнейшем будет отображаться сообщение об ошибке.

Множественные события

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

$( "#foo" ).bind( "mouseenter mouseleave", function() {
  $( this ).toggleClass( "entered" );
});

Эффект этого на <div id="foo"> (если у него нет класса "entered") заключается в добавлении класса "entered", когда курсор мыши попадает в <div>, и удалении класса, когда курсор мыши выходит.

Начиная с jQuery 1.4, мы можем привязать несколько обработчиков событий одновременно, передав объект с парами тип события/обработчик:

$( "#foo" ).bind({
  click: function() {
    // Do something on click
  },
  mouseenter: function() {
    // Do something on mouseenter
  }
});

Обработчики событий

Параметр handler принимает функцию обратного вызова, как показано выше. Внутри обработчика ключевое слово this относится к элементу DOM, к которому привязан обработчик. Для использования элемента в jQuery, его можно передать в обычную функцию $(). Например:

$( "#foo" ).bind( "click", function() {
  alert( $( this ).text() );
});

После выполнения этого кода, когда пользователь нажмёт внутри элемента с ID foo, его текстовое содержимое будет отображено в диалоговом окне.

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

В jQuery 1.4.3 теперь можно передать false вместо обработчика события. Это привяжет обработчик события, эквивалентный function(){ return false; }. Эту функцию можно удалить впоследствии, вызвав .unbind( eventName, false ).

Объект события

Функция обратного вызова handler также может принимать параметры. При вызове функции объект события будет передан первому параметру.

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

Возврат false из обработчика эквивалентен вызову как .preventDefault(), так и .stopPropagation() для объекта события.

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

$( document ).ready(function() {
  $( "#foo" ).bind( "click", function( event ) {
    alert( "The mouse cursor is at (" +
      event.pageX + ", " + event.pageY +
      ")" );
  });
});

Обратите внимание на добавленный параметр к анонимной функции. Этот код заставит щелчок по элементу с ID foo сообщить координаты курсора мыши на странице в момент щелчка.

Передача данных события

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

var message = "Spoon!";
$( "#foo" ).bind( "click", function() {
  alert( message );
});
message = "Not in the face!";
$( "#bar" ).bind( "click", function() {
  alert( message );
});

Поскольку обработчики являются замыканиями, которые оба имеют message в своей среде, оба отобразят сообщение Не в лицо! при срабатывании. Значение переменной изменилось. Чтобы обойти это, мы можем передать сообщение, используя eventData:

var message = "Spoon!";
$( "#foo" ).bind( "click", {
  msg: message
}, function( event ) {
  alert( event.data.msg );
});
message = "Not in the face!";
$( "#bar" ).bind( "click", {
  msg: message
}, function( event ) {
  alert( event.data.msg );
});

На этот раз переменная не ссылается непосредственно внутри обработчиков; вместо этого переменная передаётся по значению через eventData, что устанавливает значение на момент привязки события. Первый обработчик теперь отобразит Ложка!, а второй - Не в лицо!.

Обратите внимание, что объекты передаются функциям по ссылке, что ещё больше усложняет эту ситуацию.

Если eventData присутствует, это второй аргумент метода .bind(); если дополнительной информации не нужно отправлять обработчику, то обратный вызов передаётся в качестве второго и последнего аргумента.

См. ссылку на метод .trigger() для способа передачи данных обработчику в момент события, а не при привязке обработчика.

Начиная с jQuery 1.4, мы больше не можем прикреплять данные (и, следовательно, события) к элементам object, embed или applet, так как при прикреплении данных к Java-апплетам происходят критические ошибки.

Примечание: Хотя это показано в следующем примере, не рекомендуется привязывать обработчики как к событию click, так и к событию dblclick для одного и того же элемента. Порядок срабатывания событий зависит от браузера, с некоторыми браузерами событие получает два события клика перед dblclick, а с другими - только одно. Чувствительность к двойному щелчку (максимальное время между щелчками, которое распознаётся как двойной щелчок) зависит от операционной системы и браузера, и часто настраивается пользователем.

Примеры:

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

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>bind demo</title>
  <style>
  p {
    background: yellow;
    font-weight: bold;
    cursor: pointer;
    padding: 5px;
  }
  p.over {
     background: #ccc;
  }
  span {
    color: red;
  }
  </style>
  <script src="https://code.jquery.com/jquery-3.7.0.js"></script>
</head>
<body>
 
<p>Click or double click here.</p>
<span></span>
 
<script>
$( "p" ).bind( "click", function( event ) {
  var str = "( " + event.pageX + ", " + event.pageY + " )";
  $( "span" ).text( "Click happened! " + str );
});
$( "p" ).bind( "dblclick", function() {
  $( "span" ).text( "Double-click happened in " + this.nodeName );
});
$( "p" ).bind( "mouseenter mouseleave", function( event ) {
  $( this ).toggleClass( "over" );
});
</script>
 
</body>
</html>

Демонстрация:

Для отображения текста каждого абзаца в диалоговом окне в случае нажатия на него:

$( "p" ).bind( "click", function() {
  alert( $( this ).text() );
});

Вы можете передать дополнительные данные перед обработчиком события:

function handler( event ) {
  alert( event.data.foo );
}
$( "p" ).bind( "click", {
  foo: "bar"
}, handler );

Отмена стандартного действия и предотвращение распространения, вернув false:

$( "form" ).bind( "submit", function() {
  return false;
})

Отмена только стандартного действия с помощью метода .preventDefault().

$( "form" ).bind( "submit", function( event ) {
  event.preventDefault();
});

Прекратить распространение события без отмены стандартного действия с помощью метода .stopPropagation().

$( "form" ).bind( "submit", function( event ) {
  event.stopPropagation();
});

Привязка пользовательских событий.

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>bind demo</title>
  <style>
  p {
    color: red;
  }
  span {
    color: blue;
  }
  </style>
  <script src="https://code.jquery.com/jquery-3.7.0.js"></script>
</head>
<body>
 
<p>Has an attached custom event.</p>
<button>Trigger custom event</button>
<span style="display: none;"></span>
 
<script>
$( "p" ).bind( "myCustomEvent", function( e, myName, myValue ) {
  $( this ).text( myName + ", hi there!" );
  $( "span" )
    .stop()
    .css( "opacity", 1 )
    .text( "myName = " + myName )
    .fadeIn( 30 )
    .fadeOut( 1000 );
  });
$( "button" ).on( "click", function() {
  $( "p" ).trigger( "myCustomEvent", [ "John" ] );
});
</script>
 
</body>
</html>

Демонстрация:

Привязка нескольких событий одновременно.

$( "div.test" ).bind({
  click: function() {
    $( this ).addClass( "active" );
  },
  mouseenter: function() {
    $( this ).addClass( "inside" );
  },
  mouseleave: function() {
    $( this ).removeClass( "inside" );
  }
});

© The jQuery Foundation and other contributors
Licensed under the MIT License.
https://api.jquery.com/bind

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API