2013-05-20 23 views
7

Problema: Gli eventi blur e keyup generano una volta il carico e solo il carico. Come posso farli funzionare correttamente?

jQuery:jQuery. Su keyup e sfocatura solo onload

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

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

risposta

13

Non sta assegnando una funzione per keyup e blur, si sta assegnando il risultato dell'esecuzione di myFunction.

cambiamento in questo modo:

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

DEMO

+0

Devo davvero avere prima una funzione anonima? – Mooseman

+0

No, ma in questo caso è il modo più semplice. – Blazemonger

6

Non stai dichiarando le funzioni come callback, sei di loro e il loro risultato di ritorno viene assegnato come un callback (che doens't lavoro esecuzione).

Prova questo:

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

Si sta effettivamente eseguendo le funzioni quando li chiami in quel modo. Prova questo:

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

jsFiddle example

6

È necessario passare una funzione come argomento .. si sta passando il valore di ritorno della funzione chiamata

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

Oppure si può convertire il tuo myFunction in un generatore di funzioni

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

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

Demo ahttp://jsfiddle.net/gaby/GrMQX/6/

+0

sta tornando la funzione sta per essere più lento di chiamare la funzione anonima? – Mooseman

+1

c'è un sovraccarico trascurabile una volta quando si associano i gestori di eventi .. dopo di ciò la gestione effettiva dell'evento è esattamente la stessa. Ma risolve il problema del passaggio di un parametro quando si esegue il binding .. (* e non si ripete la funzione del corpo per ogni evento che si desidera gestire .. *) –

0

uso con .on Event()

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

    }); 
Problemi correlati