2009-02-28 4 views
0

Ich habe einen Countdown-Timer in Javascript, die von einem Code hinter asp.net VB aufgerufen wird. Ich kann keinen Weg finden, die Zeit im Auge zu behalten.ASP.NET Javascript Timer

das Problem ist., Ich kann nicht die Zeit, die nach dem Postback abgelaufen, so dass der Timer weiter ticken würde. kannst du mir bitte helfen,.?? Ich würde es wirklich schätzen,

hier ist mein Code-Fragment:.

asp.net VB codebehid

on page load{ 
     If Page.IsPostBack = True Then 
      ClientScript.RegisterClientScriptBlock(Me.GetType, "timer_script", 
      "<script language='javascript'>function mySubmit()</script>") 

      ClientScript.RegisterStartupScript(Me.GetType, "timer_script", 
      "<script>countdown_clock();</script>") 
     End If 

     If Page.IsPostBack = false Then 
      TimerTxtbx.Text = "00:06:10" 'hour:min:sec -> initialize timer 
      ClientScript.RegisterClientScriptBlock(Me.GetType, "timer_script", 
      "<script language='javascript'>function mySubmit()</script>") 

      ClientScript.RegisterStartupScript(Me.GetType, "timer_script", 
      "<script>countdown_clock();</script>") 
     End If 
    } 

    on button click{ 
     NextBtn.Attributes.Add("onclick", "mySubmit()") 'call a javascript function 

     ClientScript.RegisterStartupScript(Me.GetType, "timer_script", 
     "<script>countdown_clock();</script>") 
    } 

JavaScript-Code:

function mySubmit() 
{ 
    document.getElementById('TimerTxtbx').removeAttribute('disabled'); 
} 

    function countdown_clock() 
{     
    var current_time; 
    current_time = document.getElementById('TimerTxtbx').value; 


    var hours = current_time.substring(0,2); 
    var minutes = current_time.substring(3,5); 
    var seconds = current_time.substring(6,8); 

    var n_seconds; 
    var n_minutes = minutes; 
    var n_hours = hours; 

    if (seconds == 0) 
    { 
     n_seconds = 59; 

     if (minutes == 0) 
     { 
     n_minutes = 59; 
      if (hours == 0){ 
      alert('Time is up'); 
      return; 
      } 
       else{ 
       n_hours = hours - 1; 
       if (n_hours < 10) 
        n_hours = "0" + n_hours; 
       } 
      } 
     else 
     { 
      n_minutes = minutes - 1; 
      if (n_minutes < 10) 
       n_minutes = "0" + n_minutes; 
     } 
    } 
    else 
    { 
     n_seconds = seconds - 1; 
     if (n_seconds < 10) 
      n_seconds = "0" + n_seconds; 
    } 


     document.getElementById('TimerTxtbx').value = n_hours + ':' + n_minutes + ':' + n_seconds; 

     setTimeout("countdown_clock()",1000); //function call and delay by 1sec 

     document.getElementById('TimerTxtbx').setAttribute('disabled','disabled'); 
     }//end function 
+0

Was genau ist das Problem, das Sie haben, ist es die Zeit konstant über Postbacks zu halten? Der Code, den Sie dort eingerichtet haben, funktioniert für mich die erste Seite laden, nur nicht im Postback. –

+0

ja ,! das ist eigentlich das Problem., Ich kann nicht die Zeit bekommen, die nach dem Postback vergangen ist ,. kannst du mir bitte helfen.,? –

+0

Entschuldigung, wenn ich es nicht zum ersten Mal ausgearbeitet habe, habe ich meinen Code veröffentlicht. Dein Algorithmus und meiner sind gleich (^ _ ^). Du kannst wieder auf meinen Beitrag schauen. Ich habe bearbeitet (^ _ ^) ,. –

Antwort

0

Ich denke, Ihr Problem, dass Sie ist Sie müssen die Textbox beim Senden nicht deaktivieren. Andernfalls wird der Text nicht im Viewstate verfolgt.

Dieser Code funktioniert für mich:

<form id="form1" runat="server"> 
<div> 
    <asp:TextBox ID="TimerTxtbx" runat="server" /> 
    <asp:Button runat="server" OnClientClick="mySubmit()"/> 
</div> 
</form> 

Mit Code hinter:

protected void Page_Load(object sender, EventArgs e) 
    { 
     ClientScript.RegisterStartupScript(typeof (Page), "timer_script", 
              "<script>countdown_clock();</script>"); 

     if (!IsPostBack) 
     { 
      TimerTxtbx.Text = "00:00:10"; 
     } 
    } 

aktualisieren basierend auf Ihre Unterstützung:

Das Problem ist, dass Sie die OnClientClick Eigenschaft Ihrer Taste setzen im Click-Ereignishandler für Ihre Schaltfläche.

Dies bedeutet im Grunde, dass es keine Wirkung hat, bis die Schaltfläche geklickt wird, und dann ist es für Sie nicht nützlich.

Setzen Sie den OnClientClick irgendwo wie OnInit oder Page_Load, oder tun Sie es einfach in der aspx wie in meinem Beispiel. Macht das für Sie Sinn? Wenn Sie auf die Schaltfläche klicken, muss die OnClientClick-Eigenschaft bereits festgelegt worden sein.

Wenn Sie irgendwelche ASP.NET-Sachen machen, möchten Sie wirklich lesen und den Seitenlebenszyklus wirklich kennen lernen. Ausgangspunkte:

+0

vielen Dank., !!! Ich habe es gemacht.,!!! Wahahahah., !!! so glücklich.,!!! Ich habe gerade die "NextBtn.Attributes.Add (" onclick "," mySubmit() ")" auf Seite geladen., Vielen Dank ,. Ich schätze es wirklich,. !!! Ich habe seit Jahren an diesem Problem gearbeitet., eheheh,. Danke nochmal ,. –

+0

Kein Problem, Sie sollten das Kontrollkästchen neben der Antwort aktivieren, um es als abgeschlossen zu markieren. –