2015-12-01 35 views
0

我不斷收到錯誤0x800a1391 - JavaScript的運行時錯誤:「txtMessage」未定義 什麼,我要做的是計算一個文本框的文字字符計數

<script type="text/javascript"> 
    function textCounter(field, countfield, maxlimit) 
    { 
     if (field.value.length > maxlimit)  
      field.value = field.value.substring(0, maxlimit); 
     else 
      countfield.value = maxlimit - field.value.length; 
    } 
</script> 

文本框,我有:

<asp:TextBox ID="txtMessage" TextMode="MultiLine" Width="200px" Rows="3" runat="server" onkeyup="textCounter(txtMessage, this.form.remLen, 160);" onkeydown="textCounter(txtMessage, this.form.remLen, 160);" /> 

這裏我計數:

<input readonly="readonly" type="text" name="remLen" size="3" maxlength="3" value="160" /> characters left 
+0

你可以運行谷歌瀏覽器的代碼?因此,請檢查Chrome控制檯中的錯誤。 –

+0

在鉻沒有錯誤,但沒有計數.. –

回答

3

您指的是服務器端控件。在我的情況下,服務器上指定的ID不會與客戶端上的ID相同。您可以通過多種方法進行糾正。最直接的是改變ClientIDMode。

<asp:TextBox ID="txtMessage" ClientIdMode="static" TextMode="MultiLine" Width="200px" Rows="3" runat="server" onkeyup="textCounter(txtMessage, this.form.remLen, 160);" onkeydown="textCounter(txtMessage, this.form.remLen, 160);" /> 

將模式更改爲靜態將意味着它將使用您指定的ID。請注意,您現在負責確保ID在合成頁面(主頁面+內容頁面+用戶控件)上是唯一的。

處理JavaScript時,請始終使用瀏覽器檢查源代碼。您在服務器上查看的內容可能與您在客戶端上獲得的內容不同。

+0

我不是ASP開發,所以我只是想知道它是刪除'runat =「服務器」'相同?或者這是完全脫離主題問題?! :) –

+0

@ A.Wolff如果你刪除'runat =「server」'它將不再是一個服務器端控件,它將不會被處理,文字標記''會被髮送到客戶端,而客戶端不知道該如何處理它。如果您需要服務器端功能,請使用TextBox控件。如果您不需要服務器端功能,請使用純HTML('')。 – mason

+0

Thx反饋! –

0

如果您在客戶端使用腳本,請使用javascript訪問控件。 嘗試如下:

<asp:TextBox ID="txtMessage" TextMode="MultiLine" runat="server" Width="200px" Rows="3" onkeyup="textCounter(this.value, 160);" onkeydown="textCounter(this.value, 160);" /> 
<input id='remLen' readonly="readonly" type="text" name="remLen" size="3" maxlength="3" value="160" /> characters left 

並糾正你的腳本:

<script type="text/javascript"> 
function textCounter(value, maxlimit) 
{ 
if (value.length > maxlimit)  
    value = value.substring(0, maxlimit); 
else 
    var countfield = document.getElementById('remLen'); 
    countfield.value = maxlimit - field.value.length; 
} 
</script>