2009-02-28 2 views
0

У меня есть таймер обратного отсчета в javascript, который вызывается кодом, использующим asp.net VB. Я не могу найти способ отслеживать время.ASP.NET Javascript Timer

проблема есть., Я не могу получить время, прошедшее после обратной передачи, чтобы таймер продолжал тикать. не могли бы вы мне помочь, пожалуйста,.?? Я бы очень признателен,

вот мой фрагмент кода:.

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 код:

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

Что именно проблема у вас возникли, как это поддержание постоянной времени над постбэков? Код, который вы там установили, для меня загружает начальную загрузку страницы, а не обратно. –

+0

да ,! это на самом деле проблема. Я не могу получить время, прошедшее после обратной передачи. не могли бы вы мне помочь.,? – 2009-02-28 16:49:35

+0

извините, если я не уточнил это в первый раз, когда я разместил свой код. ваш алгоритм и мой одинаковы (^ _ ^). вы можете снова взглянуть на мой пост. Я редактировал (^ _ ^) ,. – 2009-02-28 17:03:29

ответ

0

Я думаю, ваша проблема в том, что вы при отправке необходимо отключить текстовое поле, иначе текст не будет отображаться в представлении.

Этот код работает для меня:

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

С кодом позади:

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"; 
     } 
    } 

Обновление на основе твоего:

Проблема заключается в том, что вы устанавливаете свойство OnClientClick вашей кнопки в обработчике событий Click для вашей кнопки.

В основном это означает, что он не будет иметь никакого эффекта до тех пор, пока кнопка не будет нажата, а затем она вам не полезна.

Установите OnClientClick где-то наподобие OnInit или Page_Load или просто сделайте это в aspx, как в моем примере. Это имеет смысл для вас? Когда вы нажимаете кнопку, свойство OnClientClick должно быть уже установлено.

Если вы собираетесь делать какие-либо материалы ASP.NET, вы действительно хотите прочитать и действительно познакомиться с жизненным циклом страницы. Стартовые точки:

+0

большое спасибо., !!! я сделал это.,!!! wahahahah., !!! так счастлив.,!!! Я только что положил «NextBtn.Attributes.Add (« onclick »,« mySubmit() »)« на загрузке страницы., большое вам спасибо. я очень ценю это,.!!! Я с нетерпением ждал этой проблемы с возрастом., eheheh. еще раз спасибо. – 2009-02-28 17:49:02

+0

Нет проблем, вы должны установить флажок рядом с ответом, чтобы пометить его как завершенного. –