2016-01-03 13 views
5

Mam funkcję z dwoma liniami i chcę, aby były wykonywane w kolejności. Funkcja:Wykonaj 2 funkcje JavaScript w celu

showNotification(message){ 
    $("#notificationMessageBody").html(message); // line1 
    $("#notificationModal").modal('show');  //line2 
} 

Tak więc, gdy zadzwonię showNotification("Hello World!") jak mogę zapewnić line1 jest wykonywany przed line2 (czyli zawartość ładowanie odbywa się przed modalnych wyzwalaczy) Zasadniczo, staram się wypełnić moje wiadomości w modalnym ciało, a następnie pokaż je, a nie przed napełnieniem.

--EDIT--

funkcje są rzeczywiście wykonujący jeden po drugim, ale moi modalne wyskakuje przed jQuery ładuje mój message do mojego #notificationMessageBody

W rezultacie, na przykład: Jeśli zadzwonię showNotification("Hello") Dostaję modal z "Hello" (układ modałów i rzeczy jest zrobione), ale potem, jeśli zadzwonię pod numer showNotification("World"), modal pojawi się z "Hello", a potem zmieni się na "World".

Uwaga: "Cześć" i "Świat" to duże śmieci tekstu, więc ładowanie tego do mojego DIV musi trochę potrwać, jak sądzę. Pomimo tego, że są wykonywane jeden po drugim, wydaje się (do pospolitego), że po pierwsze mod jest popping, a następnie wymiana jest wykonywana. Mam nadzieję, że teraz obraz jest trochę jasny.

Brak AJAX w dowolnym miejscu w pobliżu tej funkcji. Zasadniczo jest to moja własna funkcja alertu(), którą można powiedzieć. Modal z właściwym ID jest na mojej stronie. Zmieniam treść ciała modalnego (z funkcją jQuery na .html()) i uruchamiam modal, aby pokazać, jak widać z kodu.

+0

użyć 'setTimeout'. 'firstStatement; setTimeout (function() {secondStatment;}, 0); ' – Tushar

+1

Te metody są synchroniczne, więc jeśli nie działa poprawnie, to masz błędną diagnozę problemu. Czy modal nie ma prawidłowej zawartości, kiedy się otwiera? – JJJ

+2

Przedstaw demo pokazujące, że nie są wykonywane w kolejności. To brzmi jak problem XY. Pokaż również, jak nazywasz tę funkcję. Jeśli jest to związane z żądaniem ajaxowym, problem prawdopodobnie leży w sposobie jego nazwania. – charlietfl

Odpowiedz

3

Można użyć metody .promise() (dodane w jQuery 1.6), aby zapewnić drugi jest wykonywany po raz pierwszy została zakończona:

$("#notificationMessageBody").html(message).promise().done(function() { 
    $("#notificationModal").modal('show'); 
}); 
Powiązane problemy