2009-11-17 10 views
8

Sto tentando di associare un evento a textbox che contiene parametri. Il seguente keep sembra come se dovesse farlo, ma ogni volta che la pagina viene caricata, viene eseguita.jQuery evento di binding e unbind con parametri

jQuery(function(){ 
    jQuery('#textbox').bind('click', EventWithParam('param')); 
}); 

L'evento viene chiamato con quel parametro ogni volta che la pagina viene caricata. Questo potrebbe non funzionare perché gli eventi con parametri non sono supportati. Se è così, c'è un altro percorso?

risposta

10

Per associare una funzione che richiede parametri, utilizzare una funzione anonima per agire come chiusura sui parametri.

jQuery(function($) { 
    var param = 'text'; 
    $('#textbox').click(function() { 
     EventWithParam(param); 
     // or just use it without calling out to another function 
     $(this).text(param); 
    }); 
}); 

Il tuo esempio sta eseguendo la funzione EventWithParam, e poi cercando di legarsi al risultato di quella chiamata di funzione.

Chiamando il numero unbind senza specificare una funzione, verranno annullati tutti i gestori per il tipo di evento specificato (inclusa la funzione anonima). Se si vuole separare quella funzione particolare, è necessario dotarla di un nome, come questo:

jQuery(function($) { 
    var param = 'text', 
     clickCallback = function() { 
      EventWithParam(param); 
      // or just use it without calling out to another function 
      $(this).text(param); 
     }; 
    $('#textbox').click(clickCallback); 
}); 
1

Il motivo è che EventWithParam viene chiamato come funzione proprio lì nel vostro legame. In altre parole, vincola l'evento click al risultato della chiamata EventWithParam('param'). Questo dovrebbe funzionare:

jQuery('#textbox').bind('click',function(){EventWithParam('param')}); 

Ora che hai legato il anche a una funzione che, quando l'evento, chiameranno EventWithParam('param')

+0

se io poi faccio un UNBIND, sarà svincolare la funzione anonima? jQuery ('# textbox'). Unbind ('click') ;? –

+0

Sì. Vedi [http://docs.jquery.com/Events/unbind#typefn] – Dan

+0

Questo non funziona per me? –

0
jQuery(function() { 
    jQuery('#textbox').click(function() { 
     EventWithParam(param1,param2,...,paramN); 
    }); 
}); 

function EventWithParam(param1,param2,...,paramN) { 
    doSomething...; 
    ...; 
} 
4

bdukes è esattamente a destra. Sto aggiungendo la mia risposta perché recentemente ho trovato qualcosa di interessante che ha a che fare con la funzione bind/unbind di jQuery e le funzioni anonime, i suoi spazi dei nomi degli eventi. Precedentemente mostrato sopra l'evento di bind è chiamato come segue.

jQuery('#textbox').bind('click',function(){EventWithParam('param')});

non associare questo anche l'utente deve chiamare ... jQuery('#textbox').unbind('click');

In effetti, la rimozione di tutti gli eventi onClick.

Ora arriva in spazi nome jQuery. Se si dispone di una funzione anonima che si desidera allegare all'evento click e successivamente unbind, procedere come segue.

jQuery('#textbox').bind('click.yourNameSpace',function(){EventWithParam('param')});

Poi non associare semplice chiamata la funzione disassociazione come segue.

jQuery('#textbox').unbind('click.yourNameSpace');

Il resto dei vostri eventi onClick rimarranno.

11

È possibile passare i parametri evento come secondi argomenti da associare().Essa non è diretta parametes callback ma forse si vorrebbe usarlo:

Da documentazione jQuery: bind

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

sicuramente qualcosa che userò –

+0

Nella funzione handler(), l'oggetto è accessibile tramite il campo "data" dell'evento: gestore di funzioni (evt) {var fooValue = evt.data.foo; } – SCO