0

以下功能由于某种原因不起作用。有人能看出问题所在吗?

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 运行时错误:无法设置属性“值”的值:对象为空或未定义

4

4 回答 4

3

检查最终 HTML 中输入的 ID。由于您拥有runat="server"ASP.NET,因此可能会添加其典型的容器前缀。

于 2012-11-29T18:51:19.937 回答
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 在我的原始答案中指出了一个重要的疏忽。

于 2012-11-29T18:54:44.987 回答
0

区分大小写:

document.getElementById('remainChar').value
于 2012-11-29T18:51:15.167 回答
0

.Value 应该是 .value,脚本应该在出现在源代码中或触发 DOMReady 事件之后执行。

也因为这是 asp.net,所以盒子的 id 属性不会是“remainChar”,而是转换成别的东西。

所以你要么需要找出最终的 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>
于 2012-11-29T18:55:32.460 回答