如何修复 Javascript 计时器 在 asp.net(母版页概念)

本文关键字:母版页 net asp 何修复 Javascript 计时器 | 更新日期: 2023-09-27 18:32:50

我正在尝试在我的 asp.net 项目中添加 Javascript 计时器,它已实现并根据需要运行,但如果按任何键,它对我来说是失望的。但是计时器正在运行。

Js. 代码

function myTimer(startVal, interval, outputId, dataField) {
         this.value = startVal;
         this.OutputCntrl = document.getElementById(outputId);
         this.currentTimeOut = null;
         this.interval = interval;
         this.stopped = false;
         this.data = null;
         var formEls = document.documentElement;
         if (dataField) {
             for (var i = 0; i < formEls.length - 1; i++) {
                 if (formEls[i].name == dataField) {
                     this.data = formEls[i];
                     i = formEls.length + 1;
                 }
             }
         }
         myTimer.prototype.go = function () {
             if (this.value > 0 && this.stopped == false) {
                 this.value = (this.value - this.interval);
                 if (this.data) {
                     this.data.value = this.value;
                 }
                 var current = this.value;
                 this.OutputCntrl.innerHTML = this.Hours(current) + ':' + this.Minutes(current) + ':' + this.Seconds(current);
                 this.currentTimeOut = setTimeout("Timer.go()", this.interval);
             }
             else {
                 alert('Time Out!');
                //window.location('Index.aspx');
             }

         }
         myTimer.prototype.stop = function () {
             this.stopped = true;
             if (this.currentTimeOut != null) {
                 clearTimeout(this.currentTimeout);
             }
         }
         myTimer.prototype.Hours = function (value) {
             return Math.floor(value / 3600000);
         }
         myTimer.prototype.Minutes = function (value) {
             return Math.floor((value - (this.Hours(value) * 3600000)) / 60000);
         }
         myTimer.prototype.Seconds = function (value) {
             var hoursMillSecs = (this.Hours(value) * 3600000)
             var minutesMillSecs = (this.Minutes(value) * 60000)
             var total = (hoursMillSecs + minutesMillSecs)
             var ans = Math.floor(((this.value - total) % 60000) / 1000);
             if (ans < 10)
                 return "0" + ans;
             return ans;
         }
     }         

我从按钮控件调用它。

法典

 void Page_PreInit(object sender, EventArgs e)
{
    string timerVal = Request.Form["timerData"];
    if (timerVal != null || timerVal == "")
    {
        timerVal = timerVal.Replace(",", String.Empty);
        timerStartValue = long.Parse(timerVal);
    }
}
private Int32 TimerInterval
{
    get
    {
        object o = ViewState["timerInterval"];
        if (o != null) { return Int32.Parse(o.ToString()); }
        return 50;
    }
    set { ViewState["timerInterval"] = value; }
}
 protected void Button1_Click(object sender, EventArgs e)
{

    StringBuilder bldr = new StringBuilder();
    bldr.AppendFormat("var Timer = new myTimer({0},{1},'{2}','timerData');", this.timerStartValue, this.TimerInterval, this.lblTimerCount.ClientID);
    bldr.Append("Timer.go()");
    ClientScript.RegisterStartupScript(this.GetType(), "TimerScript", bldr.ToString(), true);
    ClientScript.RegisterHiddenField("timerData", timerStartValue.ToString());
}
void Page_PreRender(object sender, EventArgs e)
{
    StringBuilder bldr = new StringBuilder();
    bldr.AppendFormat("var Timer = new myTimer({0},{1},'{2}','timerData');", this.timerStartValue, this.TimerInterval, this.lblTimerCount.ClientID);
    bldr.Append("Timer.go()");
    ClientScript.RegisterStartupScript(this.GetType(), "TimerScript", bldr.ToString(), true);
    ClientScript.RegisterHiddenField("timerData", timerStartValue.ToString());
}

我将其显示在标签控件中。

 <asp:Label ID="lblTimerCount" runat="server" Height="27px" 
                 Width="232px"></asp:Label>

在我传递page_load之后Page_PreInit"字符串计时器Val"值相同,它从启动开始计时器。?

请纠正我。

如何修复 Javascript 计时器 在 asp.net(母版页概念)

这些是您需要遵循的简单步骤:1) 页面加载时,在隐藏元素上设置计时器间隔

你的 html 应该看起来像这样:

<input type="button" id="btnStartTimer" name="StartTimer" value="Start" />
<input type="hidden" id="hdnInterval" name="Interval" value="50" />
<p>
    <label>Show Timer:</label>
    <label id="lblOutput"></label>
</p>
$('#YourButtonId').on('click', function(e){e.preventDefault; Timer.Go(); });

您的按钮 js 单击事件应如下所示:

$('#btnStartTimer').on("click", function (e) {
    e.preventDefault();
    var interval = $('#hdnInterval').val();
    var timer = new myTimer(0, interfal, "lblOutput", null);
    timer.go();
});

类似的东西。这将使回发变得不必要