Понедельник, 13.05.2024, 07:21
Меню сайта
Категории раздела
JQuery плагины [59]
JQuery уроки [69]
PHP полезное [24]
PHP уроки [21]
Css [26]
JS [3]
SQL [9]
Css 3 [17]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » Статьи » JQuery уроки

bind()

.bind( типСобытия, [ данныеСобытия ], обработчик(объектСобытия) )

Возвращает: jQuery

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

.bind( типСобытия, [ данныеСобытия ], обработчик(объектСобытия) )

Добавлена в версию: 1.0
типСобытия
Строка, содержащая один или несколько типов событий JavaScript, такие как "click" или "submit", или пользовательские имена событий.
данныеСобытия
Карта данных, которые будут переданы в обработчик события.
обработчик(объектСобытия)
Функция, выполняемая каждый раз, когда событие вызванно.

.bind( события )

Добавлена в версию: 1.4
события
Карта из одного или нескольких типов событий JavaScript и функций для их выполнения.

.bind( типСобытия, [ данныеСобытия ], false )

Добавлена в версию: 1.4.3
типСобытия
Строка, содержащая один или несколько типов событий JavaScript, таких как "click" или "submit", или пользовательские имена событий.
данныеСобытия
Карта данных, которая будет передана в обработчик событий.
Настройка третьего аргумента в false прилагает функцию, которая предотвращает действие по умолчанию от выполнения.

Метод .bind() является основным средством прикрепления поведения к документу. Все типы события JavaScript, такие как focus, mouseover, и resize, разрешенны для eventType. (события beforeunload и error на объект window используют нестандартные конвенции и не поддерживаются jQuery; прикрепляйте обработчик напрямую к объекту window вместо этого.)

Библиотека jQuery предоставляет сокращенные методы для связывания стандартных типов событий, таких как .click() для .bind('click'). Описание для каждой может быть найденно в обсуждении сокращенного метода: blur, focus, focusin, focusout, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error.

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

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

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

Основы использования .bind():

$('#foo').bind('click', function() {
 alert('Пользователь нажал на "foo."');
});

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

Несколько событий

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

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

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

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

$('#foo').bind({
 click: function() {
 // делать что-либо по нажатию
 },
 mouseenter: function() {
 // делать что-либо при входе мышки в объект
 }
});

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

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

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

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

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

function test(){ alert("Hello"); }
$("button").click( test );
$("button").click( test );

Код выше, будет генерировать два предупреждения, когда нажата кнопка.

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

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

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

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

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

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

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

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

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

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

Потому что обработчики содержат message в их среде, оба покажут сообщение Not in the face! во время выполнения. Значение переменной изменилось. Чтобы обойти это, мы можем передать сообщение используя 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, который фиксирует значение на момент связывания события. Первый обработчик сейчас покажет Spoon!, в то время как второй выдаст сообщение Not in the face!

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

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

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

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

Пример 1

Обрабатывает события click и dblclick для параграфа. Обратите внимание: координаты относительны окна, то есть в этом примере относительны демонстрационного iframe.
 $("p").bind("click", function(e){
 var str = "( " + e.pageX + ", " + e.pageY + " )";
 $("span").text("Click happened! " + str);
 });
 $("p").bind("dblclick", function(){
 $("span").text("Double-click happened in " + this.tagName);
 });
 $("p").bind("mouseenter mouseleave", function(e){
 $(this).toggleClass("over");
 });

Пример 3

Вы можете передать некоторую дополнительную информацию перед обработчиком события:
function handler(event) {
 alert(event.data.foo);
}
$("p").bind("click", {foo: "bar"}, handler)

Пример 2

Вывод текста соответствующего параграфа в сообщении alert при совершении клика на нем:
$("p").bind("click", function(){
 alert( $(this).text() );
});

Пример 4

Для отмены действия по умолчанию и предотвращения передачи события следует возвращать false:
$("form").bind("submit", function() { return false; })

Пример 5

Для отмены лишь действия по умолчанию используется метод preventDefault.
$("form").bind("submit", function(event){
 event.preventDefault();
});

Пример 6

Для предотвращения лишь передачи события используется метод stopPropagation.
$("form").bind("submit", function(event){
 if( event.stopPropagation ) 
 { event.stopPropagation(); } //For 'Good' browsers
 else { event.cancelBubble = true; } //For IE
});

Пример 7

Также можно связывать и пользовательские события.
 $("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").click(function () {
 $("p").trigger("myCustomEvent", [ "John" ]);
 });

Пример 8

Привязывет несколько событий одновременно.
$("div.test").bind({
 click: function(){
 $(this).addClass("active");
 },
 mouseenter: function(){
 $(this).addClass("inside");
 },
 mouseleave: function(){
 $(this).removeClass("inside");
 }
});
Категория: JQuery уроки | Добавил: ChronoW (21.11.2012)
Просмотров: 1827 | Теги: jQuery bind() | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *: