0

在这个场景中,我有一个文本框和一个标签,其标签是文本框中剩余字符的倒计时。例如“剩余 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)");

大家干杯!

特伦特

4

2 回答 2

1

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

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

document.getElementById('yourid').style.display = '';
于 2013-01-25T10:38:58.077 回答
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)
于 2013-01-25T10:46:33.450 回答