【问题标题】:Putting a stopwatch on a page without using the Form tag?在不使用表单标签的情况下将秒表放在页面上?
【发布时间】:2015-07-15 16:10:01
【问题描述】:

我发现的几个示例需要一个 Form 标签,这似乎与我现有的应用程序不兼容。

我需要做的是在我的页面上添加一个计时器,该计时器在按下一个按钮时开始计时,并在按下另一个按钮时停止计时。这些按钮将位于秒表所在的 UpdatePanel 之外。

这可能与Java有关吗?我发现这个答案似乎很有希望,但行不通:

How to create a stopwatch timer

它似乎不喜欢 tm1_Tick 函数的第一行,因为它认为 sw 是 NULL。

任何示例代码或指导将不胜感激。

【问题讨论】:

  • 在我看来,你应该放弃UpdatePanel。相反,请使用您自己的 AJAX,并且仅在您确实需要获取一些额外数据时才使用服务器。 Tick 事件应该采取什么行动?

标签: javascript c# asp.net


【解决方案1】:

我发现很少有例子需要表单标签

因为它们是 ASP.NET WebForms(就像您链接到的那个:许多带有命名空间标记“asp”的服务器控件)。

为什么不纯粹用 JavaScript 来做呢?在任何事件上记下时间,然后使用setTimeout 不时更新页面内容。

(请注意,Java(Sun 和现在的 Oracle 的跨平台语言)和 JavaScript(深度集成到浏览器的脚本语言)之间唯一的共同点是它们的前四个字母。)

【讨论】:

  • 只为最后一段 +1
【解决方案2】:

我假设您的意思是“JavaScript”。客户端解决方案可以很好地使用 JS。

在网上找到了这个很好的例子(免责声明,这不是我的代码):

http://jsfiddle.net/oukjfavu/

var h1 = document.getElementsByTagName('h1')[0],
    start = document.getElementById('start'),
    stop = document.getElementById('stop'),
    clear = document.getElementById('clear'),
    seconds = 0, minutes = 0, hours = 0,
    t;

function add() {
    seconds++;
    if (seconds >= 60) {
        seconds = 0;
        minutes++;
        if (minutes >= 60) {
            minutes = 0;
            hours++;
        }
    }

    h1.textContent = (hours ? (hours > 9 ? hours : "0" + hours) : "00") + ":" + (minutes ? (minutes > 9 ? minutes : "0" + minutes) : "00") + ":" + (seconds > 9 ? seconds : "0" + seconds);

    timer();
}
function timer() {
    t = setTimeout(add, 1000);
}
timer();


/* Start button */
start.onclick = timer;

/* Stop button */
stop.onclick = function() {
    clearTimeout(t);
}

/* Clear button */
clear.onclick = function() {
    h1.textContent = "00:00:00";
    seconds = 0; minutes = 0; hours = 0;
}

【讨论】:

  • 更改 start.onclick = timer;到停止和清除之类的功能。
  • 非常感谢,杰米森!我不得不对其进行一些调整,我已将其添加为社区 Wiki 答案,因此我没有得到任何代表。
【解决方案3】:

为了完全清楚,我将其作为答案,但它基于 Jamieson 的答案。最终结果是添加了这个 Javascript:

<script type = "text/javascript">
    /* Stop, Clear and Pause the timer displayed under the pause buttons  */
    var h1 = document.getElementsByTagName('h1')[0],
        start = document.getElementById('start'),
        stop = document.getElementById('stop'),
        clear = document.getElementById('clear'),
        seconds = 0, minutes = 0, hours = 0,
        t;

    function add() {
        seconds++;
        if (seconds >= 60) {
            seconds = 0;
            minutes++;
            if (minutes >= 60) {
                minutes = 0;
                hours++;
            }
        }

        document.getElementById('<%=h1.ClientID%>').innerText = (hours ? (hours > 9 ? hours : "0" + hours) : "00") + ":" + (minutes ? (minutes > 9 ? minutes : "0" + minutes) : "00") + ":" + (seconds > 9 ? seconds : "0" + seconds);;
        timer();
    }
    function timer() {
        t = setTimeout(add, 1000);
    }

    function stp() {
        clearTimeout(t);
    }

    function clr() {
        document.getElementById('<%=h1.ClientID%>').innerText = "00:00:00";
        seconds = 0; minutes = 0; hours = 0;  
    }
</script>

您需要添加的 ASP.Net 部分是:

 <asp:UpdatePanel ID="UpdatePanel4" runat="server">
     <ContentTemplate>
         <table style="width:132px; margin-left:13px">
             <tr>
                 <td style="text-align:center; margin-left:2px; border:double; background-color:darkcyan">
                     <asp:Label ID="h1" runat="server" ForeColor="White"><time>00:00:00</time></asp:Label>
                 </td>
             </tr>
         </table>                                    
     </ContentTemplate>
</asp:UpdatePanel>

然后,我在我的 ASP 按钮中添加了这个:

onclientclick="stp();"

(如果您的按钮上已经有onclientclick,只需用分号分隔它们,您可以在onclientclick中有多个功能)

然后我需要将它添加到我的代码隐藏中的几个位置:

ScriptManager.RegisterClientScriptBlock(UpdatePanel4, this.GetType(), "script", "stp()", true);
ScriptManager.RegisterClientScriptBlock(UpdatePanel4, this.GetType(), "script", "clr()", true);

最后一块可能需要也可能不需要,这取决于你在做什么。

【讨论】:

    【解决方案4】:

    如果我正确理解您的问题,您可以完全用 JavaScript 创建自己的倒数计时器,然后对您的更新面板进行 AJAX 调用。

    这是一个纯 JS 倒计时的简短示例:

    var start = document.getElementById("start");
    start.addEventListener("click", function() {
      var interval = setInterval(function() {
        var watch = document.getElementById("watch");
        var value = watch.value - 1;
        watch.value = value;
        if (value <= 0)
          clearInterval(interval);
      }, 1000);
    });
    <input id="watch" value="10" />
    <input id="start" type="button" value="start" />

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 2013-07-23
      • 2017-02-25
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      相关资源
      最近更新 更多