2012-07-19 20 views
6

Sto cercando di innescare un secondo evento dipende dal primo in questo modo:Come posso rilevare un completamento di eventi trigger jQuery?

... 
$('#productFamilyId').val(data.contents.productfamily); 
$('#productFamilyId').trigger('change', function() { 
    $('#productId').val(data.contents.product); 
    $('#productId').trigger('change'); 
}); 

Non è in attesa del primo trigger per completare prima di tentare di innescare il secondo evento. È possibile attendere il completamento del primo trigger?

risposta

1

Non esiste una richiamata per il metodo di attivazione. I parametri extra sono proprio questo: i parametri.

http://api.jquery.com/trigger/

cosa si sta effettivamente facendo è in esecuzione il codice nella seconda funzione e poi passando il risultato come un parametro nel gestore di eventi chiamato da innesco. È necessario attivare il 2 ° evento all'interno del gestore eventi per il primo evento se si desidera che vengano eseguiti in sequenza.

2

Probabilmente si desidera che questo:

$('#productFamilyId').trigger('change', function() { 
    $('#productId').val(data.contents.product); 
    setTimeout(function(){ 
     $('#productId').trigger('change'); 
    },1); 
}); 
1

è possibile utilizzare JavaScript setTimeout() la funzione, in modo che la funzione verrà eseguita dopo un certo intervallo di tempo.

$('#productFamilyId').val(data.contents.productfamily); 
$('#productFamilyId').trigger('change', function() { 
setTimeout(function(){  
$('#productId').val(data.contents.product); 
    $('#productId').trigger('change'); 
},100); 
}); 
+0

@Archer lasciami parlare grazie, grazie amico: P – Shreedhar

1

Se il gestore di eventi non esegue una chiamata asincrona, l'evento innescata eseguirà e finitura, solo allora passare alla riga successiva. JsFiddle

$('#productFamilyId').val(data.contents.productfamily); 
$('#productFamilyId').trigger('change'); 
// Execute after change complete 
$('#productId').val(data.contents.product); 
$('#productId').trigger('change'); 

Con chiamata asincrona (setTimeOut, Ajax, ecc) nel gestore di eventi si può fare questo: JsFiddle

Aggiungere una funzione di callback come parametro nel vostro gestore di eventi:

$("#productFamilyId").change(function(e, callback) { 
    // Simulating ajax 
    setTimeout(function() { 
     if (typeof callback === "function") 
      callback(); 
    }, 3000); 
}); 

E trigger come questo:

$('#productFamilyId').trigger('change', function() { 
    $('#productId').val(data.contents.product); 
    $('#productId').trigger('change'); 
}); 
Problemi correlati