2012-07-19 18 views
6

Próbuję wywołać drugie zdarzenie zależne od pierwszej tak:Jak wykryć zakończenie zdarzeń wyzwalacza jquery?

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

To nie czekając na pierwszy spust, aby zakończyć przed przystąpieniem do uruchomienia drugiego zdarzenia. Czy można poczekać na zakończenie pierwszego wyzwalacza?

Odpowiedz

1

Brak wywołania zwrotnego dla metody wyzwalania. Dodatkowe parametry są właśnie tym - parametrami.

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

Co ty właściwie robisz jest uruchomiony kod w drugiej funkcji, a następnie przechodząc wynik jako parametr do obsługi zdarzenia zwanego przez spust. Musisz wywołać drugie zdarzenie w ramach obsługi zdarzenia dla pierwszego zdarzenia, jeśli chcesz, aby były uruchamiane kolejno.

2

Prawdopodobnie chcesz to:

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

można użyć javascripts setTimeout() funkcja, tak że funkcja wykona po pewnym odstępie czasu.

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

@ Archer pozwól mi tel. Dziękuję, dziękuję kolego: P – Shreedhar

1

Jeśli program obsługi zdarzeń nie wykona asynchronicznego wywołania, wyzwalane zdarzenie zostanie wykonane i zakończone, a następnie przejdzie do następnego wiersza. JsFiddle

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

Z asynchronicznego wywołania (setTimeout, Ajax itp) w obsługi zdarzeń można to zrobić: JsFiddle

Dodaj funkcję zwrotną jako parametr w procedurze obsługi zdarzenia:

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

I wyzwalacz w ten sposób:

$('#productFamilyId').trigger('change', function() { 
    $('#productId').val(data.contents.product); 
    $('#productId').trigger('change'); 
}); 
Powiązane problemy