2013-09-26 35 views
0

我試圖實現ASP中的小程序,它用計時器計數。我在JavaScript中使用這個任務,當我用尖銳的代碼調用它時會遇到一些問題。所以,這個代碼很好用:javaScript與ASP

<head runat="server"> 
<title></title> 
<script type="text/javascript" language="javascript"> 
    function counter() { 
     var q = Number(document.getElementById("TextBox1").value); 
     var i = Number(document.getElementById("Text1").value); 
     if (i < q) { 
      i += 1; 
      document.getElementById("Text1").value = i; 
      setTimeout("counter()", 10); 
     } 
    } 
</script> 
</head> 
<body> 
<form id="form1" runat="server"> 
<div> 
    <asp:TextBox ID="TextBox1" runat="server" ReadOnly="True"></asp:TextBox> 
    <input id="Button1" type="button" value="button" onclick="counter()" /> 
    <input id="Text1" name="Text1" type="text" value="0"/> 
</div> 
</form> 
</body> 

隨機函數在Page_Load中生成值並放入TextBox1中。在這段代碼中,我使用了一切的輸入。但我想用asp控制,然後我試圖從尖銳重寫相同與和調用腳本,但我的代碼無法正常工作:

<body> 
<form id="form1" runat="server"> 
<div> 
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
    <asp:Button ID="Button1" runat="server" Text="Button" /> 
    <asp:Label ID="Text1" runat="server" Text="0"></asp:Label> 
</div> 
</form> 
</body> 

和尖銳代碼:

string str = "function counter() { 
    var q = Number(document.getElementById(\"TextBox1\").value); 
    var i = Number(document.getElementById(\"Text1\").value); 
    if (i < q) { i += 1; document.getElementById(\"Text1\").value = i; 
    setTimeout(\"counter()\", 10) } }"; 
ClientScript.RegisterClientScriptBlock(this.GetType(), "counter", str, true); 
Button1.Attributes.Add("onclick", "counter()"); 

這我所看到的HTML輸出:

<script type="text/javascript"> 
//<![CDATA[ 
function counter() { var q = Number(document.getElementById("TextBox1").value); var i = Number(document.getElementById("Text1").value); if (i < q) { i += 1; document.getElementById("Text1").value = i; setTimeout("counter()", 10) } }//]]> 
</script> 
<div class="aspNetHidden"> 
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEdAAPaDIYgDxN4mARW8/nWYR/uESCFkFW/RuhzY1oLb/NUVM34O/GfAV4V4n0wgFZHr3e02FqXa4CDb/Y32Jm7yDyEftd8wArFmKGvvW1nftcl6Q==" /> 
</div> 
<div> 
    <input name="TextBox1" type="text" value="1332073012" id="TextBox1" /> 
    <input type="submit" name="Button1" value="Button" onclick="counter();" id="Button1" /> 
    <span id="Text1">0</span> 
</div> 
</form> 
</body> 

我看到劇本和按鈕上用onclick =「計數器()」方法,但它不工作,我不知道爲什麼。我找不到類似的樣本。

+0

我想你使用的是提交按鈕,它可能不適用於當前使用onclick – sino

回答

1

該問題與運行服務器上的代碼很少有關,更多的是關於節點Text1從輸入到範圍的更改。

首先,更改對Text1的所有引用以獲取屬性innerHTML而不是value,其次,向click事件添加一個返回false,以便表單不會被提交。最後,你錯過了一個;在C#代碼塊中,應該用函數調用setTimer,而不是字符串。

生成的代碼是這樣的:

string str = "function counter() { 
    var q = Number(document.getElementById(\"TextBox1\").value); 
    var i = Number(document.getElementById(\"Text1\").innerHTML); 
    if (i < q) { i += 1; document.getElementById(\"Text1\").innerHTML = i; 
    setTimeout(function(){counter();}, 10); } }"; 
ClientScript.RegisterClientScriptBlock(this.GetType(), "counter", str, true); 
Button1.Attributes.Add("onclick", "counter(); return false;"); 

順便說一句,如果你可以編寫腳本它在客戶端,你應該。在服務器端寫javascript肯定違反了unobtrusive principle

+0

的工作,並且如果我將TextBox代替標籤輸出到我的初始代碼中,則工作正常。 – mit