2013-05-20 1 views
7

Задача: blur и keyup событий каждый пожар один раз при загрузке и только при загрузке. Как я могу заставить их работать правильно?

JQuery:jQuery .on keyup и размытие только при загрузке

function myFunction(text){ 
    alert(text); 
} 
$('#input1').on({ 
    keyup: myFunction('keyup'), 
    blur: myFunction('blur'), 
    focus: function(){console.log('focus!');} 
}); 

Fiddle: http://jsfiddle.net/GrMQX/

ответ

13

Вы не назначаем функцию keyup и blur, вы присваиваете результат выполнения myFunction.

Изменить это следующим образом:

$('#input1').on({ 
    keyup: function() { myFunction('keyup'); }, 
    blur: function() { myFunction('blur'); }, 
    focus: function() { console.log('focus!'); } 
}); 

DEMO

+0

Нужно ли мне сначала иметь анонимную функцию? – Mooseman

+0

Нет, но это самый простой способ в этом случае. – Blazemonger

6

Вы не объявляя функции, как функции обратного вызова, вы их выполнения и их возвращение результат присваивается в качестве обратного вызова (который doens't работу).

Попробуйте это:

$('#input1').on({ 
    keyup: function() { myFunction('keyup') }, 
    blur: function() { myFunction('blur') }, 
    focus: function(){console.log('focus!');} 
    }); 
4

Вы фактически выполняющее функции при вызове их таким образом. Попробуйте это:

$('#input1').on({ 
    keyup: function(){myFunction('keyup')}, 
    blur: function(){myFunction('blur')}, 
    focus: function(){console.log('focus!');} 
}); 

jsFiddle example

6

Вам необходимо передать функцию в качестве аргумента .. вы передаете возвращаемое значение вызываемой функции

function myFunction(text){ 
    alert(text); 
} 
$('#input1').on({ 
    keyup: function(){myFunction('keyup');}, 
    blur: function(){myFunction('blur');}, 
    focus: function(){console.log('focus!');} 
}); 

Или вы может преобразовать myFunction в генератор функций

function myFunction(text){ 
    return function(){ 
     console.log(text); 
    } 
} 

$('#input1').on({ 
    keyup: myFunction('keyup'), 
    blur: myFunction('blur'), 
    focus: function(){console.log('focus!');} 
}); 

Демо наhttp://jsfiddle.net/gaby/GrMQX/6/

+0

возвращает функцию собирается быть медленнее, чем вызов анонимной функции? – Mooseman

+1

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

0

использование с .ON() Event

$(document).on("keyup blur", "#input1", function(event) 
    {  
    // your code   

    });