以下功能由于某种原因不起作用。有人能看出问题所在吗?
function checkMaxLen(txt, maxLen) {
var actualLen = txt.value.length;
var remain = maxLen - actualLen;
document.getElementById('remainChar').Value = remain;
}
<input type="text" id="remainChar" runat="server" value="500"/>
每当我尝试运行该函数时,都会收到此错误:
Microsoft JScript运行时错误:无法设置属性“Value”的值:object为null或undefined
答案 0 :(得分:3)
检查最终HTML中输入的ID。由于您有runat="server"
ASP.NET可能会添加其典型的容器前缀。
答案 1 :(得分:1)
主要问题:没有Javascript getElementById问题,而是将正确的id提供给getElementById(因为ASP.NET可以随意更改runat =“server”元素的ID) )(由接受的答案覆盖)。这就是导致OP报告错误的原因:
Microsoft JScript runtime error: Unable to set value of the property 'Value': object is null or undefined
这是因为getElementById被赋予了一个不存在的id并返回null。
另一个问题:第二个问题确实是一个Javascript问题,但与getElementById无关。 Javascript区分大小写,因此尝试设置输入元素的DOM对象的value属性不能通过尝试设置但即使(不存在的)Value属性。
<强>解决方案:强>
解决这两个问题的正确代码如下:
function checkMaxLen(txt, maxLen) {
var actualLen = txt.value.length;
var remain = maxLen - actualLen;
document.getElementById('<%= remainChar.ClientId%>').value = remain
}
注意:感谢Ian在我的原始答案中指出了一个重要的疏忽。
答案 2 :(得分:0)
区分大小写:
document.getElementById('remainChar').value
答案 3 :(得分:0)
.Value应该是.value,脚本应该在源中出现之后或者在DOMReady事件被触发之后执行。
由于这是asp.net,因此该框的id属性不会是“remainingChar”,而是转换为其他内容。
因此您需要找出最终ID的内容或删除runat="server"
属性
<html>
<body>
<input type="text" id="remainChar" value="500"/>
<script>
function checkMaxLen(txt, maxLen) {
var actualLen = txt.value.length;
var remain = maxLen - actualLen;
document.getElementById('remainChar').value = remain;
}
checkMaxLen({value:""},20);
</script>
</body>
</html>