2013-03-20 6 views
21

Devo attivare un evento personalizzato nel callback di una chiamata trigger, ma non riesco a farlo funzionare.Come eseguire una funzione di callback su un trigger jQuery ("clic")?

ho provato questo:

var $input = $(".ui-popup-container").find("input").eq(2); 

function runtests() { 
    console.log("clicked the input"); 
}; 
$input.trigger('click', runtests()); 

e questo:

var $input = $(".ui-popup-container").find("input").eq(2); 
$input.trigger('click', function(){ 
    console.log("clicked the input"); 
} 

Nessuno dei quali lavora.

Domanda:
Come faccio ad avere una funzione di callback da eseguire quando sto innescando un clic su un elemento?

+1

perché vuoi aggiungere indefinito come secondo parametro per far scattare? Cosa dovrebbe fare il secondo parametro? Stai innescando confondendo e legando? –

+0

Questo è il mio tentativo di una funzione di callback ...Ho anche provato a racchiuderlo in '[]' come per [jquery API] (http://api.jquery.com/trigger/), ma anche non funziona. – frequent

+1

'.trigger' non accetta alcuna callback. '$ input.trigger ('click')' attiva l'evento 'click' sugli elementi' $ input', cioè eseguirà i gestori di eventi 'click' associati a quegli elementi. Sembra che tu abbia associato 'runtest' a' $ input', ma non sono sicuro di cosa desideri esattamente. –

risposta

21

Quando si chiama trigger, il gestore di eventi associato viene immediatamente eseguito, quindi non è necessario alcun richiamo. Basta usare

$input.trigger('click'); 
runtests(); 
+0

+1 Ciò dovrebbe funzionare correttamente, secondo i documenti: http://qunitjs.com/cookbook/#testing-user-actions. –

+0

la strada da percorrere. Grazie a – frequent

+1

@frequent, si stavano confondendo callback e gestori, ovviamente. Se non c'è attività asincrona associata all'azione, è un gestore che * si attiva *, mentre se c'è un'attività asincrona, si assegna un * callback * per gestire la sua risposta quando si verifica (o per stato). –

4

Il trigger non ha la funzione di richiamata.

.trigger(eventType [, extraParameters ]) 

Official Document

Cosa si può fare

var $input = $(".ui-popup-container").find("input").eq(2); 

$input.on('click',function(){ 
    console.log("clicked the input"); 
}); 
+0

@dystroy scusa stavo modificando la mia risposta ... –

+0

ok. Grazie per il chiarimento. – frequent

0

The Trigger non dispone di una funzione di callback - si può meglio riscrivere il codice per utilizzare il metodo .on .

$("body").on("click", "#click", function() { 
    alert("Clicked!"); 
}); 

JSFiddle.

11

Per prima cosa è necessario associare l'evento click e quindi è possibile attivare l'evento click.

$input.bind('click', function() { 

    console.log("clicked the input"); 
}); 

$input.trigger('click'); 
+0

sì. questo è un modo. Grazie. – frequent

+2

Usa '.on()' invece di '.bind()'. – Simon

2

è necessario utilizzare bind o on per aggiungere funzioni di callback. Nel tuo caso si dovrebbe essere così:

var $input = $(".ui-popup-container").find("input").eq(2); 

function runtests() { 
    console.log("clicked the input"); 
}; 

$input.bind('click', runtests); 

ancora più breve versione per click vincolante è $input.click(runtests)

Poi sarà chiamato al clic o si può innescare manualmente con $input.trigger('click') o semplicemente $input.click().

0

Se si dispone di un gestore di clic su ogni ingresso, ma vuole fare qualcosa su un elemento specifico:

var $container = $(".ui-popup-container"), 
    special = 2; 

$container.on('click', 'input', function() { 
    // do something for every input 

    if($(this).index() == special) { 
     // your "callback", e.g. the function you want to execute on input:eq2 click 
     myfunction(); 
    } 
}).find('input').eq(special).trigger('click'); 
8

Sì - E 'vero che trigger non prendere richiamata ma possiamo passare la richiamata come parametro.

//.trigger(eventType [, extraParameters ]) 

$("#element").bind("customCall", function(e, callback){ 
    callback(); 
} 
var callback = function(){alert("Hello");} 
$("#element").trigger("customCall",[callback]); 

auguriamo che questo aiuta

+2

Se hai già familiarità con la convenzione per l'assegnazione delle funzioni di callback quando definisci un evento associato per un elemento DOM, questa risposta ti dice in realtà come potresti effettivamente passare una funzione di callback dinamica nel momento in cui viene attivato l'evento. Questo lo rende una delle risposte più preziose su questa pagina, per me. – tobylaroni

+0

D'accordo con @tobylaroni. Non so perché questa non era la risposta accettata! Probabilmente la domanda era specifica per "innescare" rispetto a una chiamata personalizzata. – Rahatur

Problemi correlati