2015-04-28 25 views
7

Pozwól mi wyjaśnić: Gdy wywołasz alert() w JS, cały kod, który w dolnej części alertu, zatrzyma się i po kliknięciu w Ok , kod zwraca pracę.Zatrzymaj cały kod i kontynuuj po nim, jak alert() w JS

mam zrobić własny niestandardowy alert z tym kodem:

function cAlert() 
{ 
var bOn; 
this.show = function (content) 
{  
    bOn = true; 
    document.write('<div id="turnOffLight"></div><div id="cAlertBox"><div id="cAlertImageBox"><img style="position: absolute; top: 54%; left: 50%; margin-top: -32px; margin-left: -32px;" src="Images/Vectors/1429744831_678136-shield-warning-64.png" alt=""/> </div><div id="cAlertContentBox"> </div><div id="cAlertButtonBox"><input id="cAlertButtonStyle" type="button" value="OK" onclick="cAlert.ok()" /></div></div>'); 
    $("#cAlertContentBox").html(content); 
    $("#cAlertBox").show(); 
    $("#turnOffLight").fadeIn("fast"); 

    var div = document.getElementById('cAlertBox').offsetWidth; 
    var res = -Math.abs(div/2); 
    document.getElementById('cAlertBox').style.marginTop = res + "px"; 
}; 
this.ok = function() 
{ 
    $("#cAlertBox").hide(); 
    $("#turnOffLight").fadeOut("medium"); 
    bOn = false; 
}; 
} 

i na innych stronach:

<head> 
    <script src="Scripts/jQuery_1.11.2.js" type="text/javascript"></script> 
    <script src="Scripts/cAlertScript.js" type="text/javascript"></script> 
    <script type="text/javascript">var cAlert = new cAlert();</script> 
</head> 

ale mam problem, na stronie logowania, po połączeniu cAlert(), nazywam to:

echo "<script>javascript:history.go(-1)</script>"; 

, aby powrócić do ostatniej strony, gdy używałam alert(), tylko po tym, jak użytkownik kliknie ok, przeglądarka powróci do ostatniej strony, ale używając cAlert, przeglądarka powraca już na ostatnią stronę.

Chcę, aby użytkownik kliknął przycisk OK, aby kontynuować kod jako alert().

+1

To jest po prostu niemożliwe w JS oprócz dla natywnych funkcji 'alert()', 'confirm() 'i' prompt() '. Tylko ci mają możliwość zatrzymania wątku wykonywania. Chyba że masz ochotę napisać własny silnik JavaScript, który przestałby wykonywać inne funkcje ...: P +1 za dobrze napisane pytanie. – Scimonster

Odpowiedz

0

Ponieważ chcesz, aby strona powróciła po kliknięciu przycisku OK, umieść wywołanie funkcji lub kod, aby powrócić do funkcji cAlert.ok(). W ten sposób strona powróci tylko wtedy, gdy użytkownik kliknie przycisk OK, ponieważ ta funkcja jest wywoływana tylko wtedy, gdy użytkownik kliknie przycisk OK.

this.ok = function() 
{ 
    $("#cAlertBox").hide(); 
    $("#turnOffLight").fadeOut("medium"); 
    bOn = false; 

    window.history.go(-1); 
}; 
+0

To mi się nie przyda, ponieważ chcę użyć tego alertu na innych stronach, a nie poza nim, muszę wrócić na ostatnią stronę ... –

+0

@ JuniorVenâncio: Następnie przekaż połączenie zwrotne do 'cAlert' ... – Bergi

2

Zmień cAlert.show(content) do cAlert.show(content, success). Zmień cAlert.ok() na cAlert.ok(' + success + '). Zmień this.ok = function() na this.ok = function (success), a na koniec dodaj success(); na końcu funkcji ok().

To zadzwoni pod numer success po kliknięciu przycisku w cAlert.

Zamiast dzwonić pod numer cAlert.show("text"), należy teraz zadzwonić pod numer cAlert.show("text", function() { javascript:history.go(-1); }).


więc kod powinien być:

function cAlert() 
{ 
var bOn; 
this.show = function (content, success) 
{  
    bOn = true; 
    document.write('<div id="turnOffLight"></div><div id="cAlertBox"><div id="cAlertImageBox"><img style="position: absolute; top: 54%; left: 50%; margin-top: -32px; margin-left: -32px;" src="Images/Vectors/1429744831_678136-shield-warning-64.png" alt=""/> </div><div id="cAlertContentBox"> </div><div id="cAlertButtonBox"><input id="cAlertButtonStyle" type="button" value="OK" onclick="cAlert.ok(' + success + ')" /></div></div>'); 
    $("#cAlertContentBox").html(content); 
    $("#cAlertBox").show(); 
    $("#turnOffLight").fadeIn("fast"); 

    var div = document.getElementById('cAlertBox').offsetWidth; 
    var res = -Math.abs(div/2); 
    document.getElementById('cAlertBox').style.marginTop = res + "px"; 
}; 
this.ok = function (success) 
{ 
    $("#cAlertBox").hide(); 
    $("#turnOffLight").fadeOut("medium"); 
    bOn = false; 

    success(); 
}; 
} 

oraz:

<head> 
    <script src="Scripts/jQuery_1.11.2.js" type="text/javascript"></script> 
    <script src="Scripts/cAlertScript.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
     var cAlert = new cAlert(); 
     cAlert.show("text", function() { javascript:history.go(-1); }); 
    </script> 
</head> 
+0

Używam to: echo ""; Pojawi się alert, ale gdy kliknę przycisk OK, nic się nie dzieje. –

+0

lol Zapomniałem edytować połowę kodu, a później zorientowałem się, że to nie działa w pierwszej kolejności. Teraz powinno działać, przetestowałem to ... Więc sprawdź zredagowany post i miej nadzieję, że niczego nie przeoczyłem. – DutChen18