文本框中的倒计时字符标记不起作用

时间:2013-01-25 10:24:18

标签: c# javascript asp.net

在这个scernario中,我有一个文本框和一个标签,其标签是文本框中可用剩余字符的倒计时。例如。 “剩下239个字符”。

我个人想要使用javascript函数几次,所以我想将变量传递给函数。这些是,maxlength(长度),文本框(用于字段)和标签(用于计数器标签)。

然而,我遇到的问题是这根本不起作用。为了确保它不仅仅是IE的东西,我在Firefox 18中进行了测试,并且它也产生了相同的标签不会改变的地方......它几乎就像onKeyUp方法被称为注释。

无论如何我的代码。

的JavaScript

<script type="text/javascript">
    function countCharacters(textbox, label, maxcount) {
        var count = parseInt(document.getElementById(textbox).value.length);
        document.getElementById(label).innerHTML = maxcount - count;
    }

标签和文字框

            <asp:TextBox ID="tbComment01" runat="server" CssClass="txt" TextMode="MultiLine" Width="500px" Visible="false" MaxLength="500"></asp:TextBox>
        <br />
        <asp:Label ID="lbCommentCount01" runat="server" Text="Label" Visible="false" CssClass="size11_text_blurb"></asp:Label>

代码背后

tbComment01.Attributes.Add("onKeyUp", "countCharacters(" + tbComment01.ClientID + "," + lbCommentCount01.ClientID + ", 500)");

干杯!

2 个答案:

答案 0 :(得分:1)

看起来这是由于lbCommentCount01仍然是Visible="false"服务器端,当Visible="false"时,控件未呈现为页面。 (这是为了节省带宽。)

如果您想让控件最初不可见,但在javascript中将其显示,请确保使用style="display:none;"并在代码中删除它:

document.getElementById('yourid').style.display = '';

答案 1 :(得分:1)

问题是因为函数的参数没有引号。因此它传递的是HTML元素对象,而不是它们的ID。因此,您在对象上使用getElementById而不是ID [应该是字符串]

之前,您的功能看起来像

onKeyUp="countCharacters(tbComment01,lbCommentCount01, 500)"

因此传递HTMLTextAreaElement而不是字符串“tbComment01”

应该是

onKeyUp="countCharacters('tbComment01','lbCommentCount01', 500)"

这应该解决它,请注意我已经添加了代码隐藏的单引号

tbComment01.Attributes.Add("onKeyUp", "countCharacters('" + tbComment01.ClientID + "','" + lbCommentCount01.ClientID + "', 500)");

或更好

tbComment01.Attributes.Add("onKeyUp",String.Format("countCharacters('{0}','{1}', 500) ", tbComment01.ClientID, lbCommentCount01.ClientID)