在这个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)");
干杯!
遄
答案 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)