jQuery 1 действия на 2 события

R
На сайте с 18.12.2009
Offline
92
3829

Здравствуйте. Есть 2 обработчика, которые делают одно и тоже. Пример:


$('#selector').blur(function(){
alert('Hello');
});

$('#selector').bind('keypress', function(e){
if(e.keyCode==13){
alert('Hello');
}
});

Как их объединить? Чтобы не плодить кучу повторного текста. С php у меня проблем не возникало, но тут есть пробелы в знаниях синтаксиса. Спасибо.

siv1987
На сайте с 02.04.2009
Offline
427
#1

В смысле объединить, и что они делают одно и тоже?

R
На сайте с 18.12.2009
Offline
92
#2

как видно по коду, они выводят в окошке на экран слово "Hello"

В реальном проекте конечно все сложнее.

Данные из input отправляются посредством AJAX по нажатию на Enter или при потере фокуса(blur) из


<input type="text" id="selector" tabindex="1">
siv1987
На сайте с 02.04.2009
Offline
427
#3

Наверное как-то так


$('#selector').bind({
blur: function(){alert('Hello');},
keypress: function(e){
if(e.keyCode==13){
alert('Hello');
}
}
});

http://api.jquery.com/bind/#multiple-events

http://api.jquery.com/blur/

R
На сайте с 18.12.2009
Offline
92
#4

но в таком случае у нас снова повтор


alert('Hello');

А если вместо


alert('Hello');

будет куча кода?

siv1987
На сайте с 02.04.2009
Offline
427
#5
rerighter:
А если вместо alert('Hello');
будет куча кода?

"Куча кода" можно вывести в отдельную функцию.

C
На сайте с 04.02.2005
Offline
277
#6

м...

условно allert - это некая функция.

Да... ее нужно всегда вызывать

$('#selector').bind({

blur: function(){func();},

keypress: function(e){

if(e.keyCode==13){

func();

}

}

});

function func(){

alert('Hello')

}

Интересно, а как в php?

R
На сайте с 18.12.2009
Offline
92
#7
Chukcha:
Интересно, а как в php?

Спасибо. Я думал, что синтаксически возможен вариант с логическим ИЛИ (OR, ||).

C
На сайте с 04.02.2005
Offline
277
#8

Может быть и возможен.

Только не забывайте о сопровождении кода

siv1987
На сайте с 02.04.2009
Offline
427
#9
rerighter:
Я думал, что синтаксически возможен вариант с логическим ИЛИ (OR, ||).

Ну в multiple events описывается еще такой вариант если вам подходит .bind('mouseenter mouseleave', handler)

_
На сайте с 13.11.2012
Offline
2
_A_
#10

Еще вариант(jQ >= 1.7):


$('#selector').on (
blur: function () { alert('Hello'); },
keypress: function (e) { e.keyCode==13 ? $('#selector').trigger('blur'); }
);
Самый стабильный хостинг (http://www.beget.ru/?id=27692)

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