2015-03-27 1 views
3

J'ai quelque chose comme ceci: $('#select1').on('change', function() {}) et il fonctionne très bien. Cependant, j'ai besoin d'exécuter une autre fonction une fois la fonction terminée.exécuter une fonction après un événement on.change

Je pensais à prendre le contenu de la fonction, et le mettre dans une fonction nommée, puis en prenant la deuxième fonction et faire la même chose, et en les plaçant dans la fonction anonyme:

$('#select1').on('change', function() { 
    function1(); 
    function2(); 
}); 

Cependant, j'espérais il y avait un autre moyen. Ce qui précède semble incompatible avec jQuery.

+0

Plus d'informations seraient probablement utiles ici. Si 'function1' est un changement d'état et que' function2' met à jour la présentation, vous pouvez utiliser publish/subscribe ou le pattern d'observateur. – acbabis

Répondre

0

pourquoi ne pas vous essayez fonction jquery changement insted javascript se lient

$ ("# select1") .Modification (function() {

function1(); fonction2()

}) ;

+0

J'espérais que je ne les aurais pas séparés du tout. Peut-être juste enchaîner les fonctions? – nobrandheroes

1

Essayez ceci:

$('#select1').on('change', function() { 
    function1(someVariable, function() { 
     function2(someOtherVariable); 
    }); 
}); 


function function1(param, callback) { 
    //...do stuff 
    callback(); 
} 

Voici où je trouve que: Call a function after previous function is complete

+1

Bien que cela fonctionne, les objets jQuery différés sont généralement recommandés pour enchaîner les fonctions. – gregnr

+0

bien, en fait je ne suis pas un expert sur jQuery ... btw ty –

+0

Merci, cela a fonctionné pour moi. –

1

Bien que vous puissiez imbriquer des fonctions avec callbacks, généralement les meilleures pratiques en jQuery est d'utiliser jQuery.Deferred.

var function1 = function() { 

    var deferred = $.Deferred(); 

    //Do your thing. When finished, call deferred.resolve() 

    return deferred; 
} 

var function2 = function() { 

    //Function 2 code 
} 

$('#select1').on('change', function() { 

    function1().then(function2); 
});