无法使document.getElementByID起作用

时间:2012-11-29 18:48:19

标签: javascript asp.net

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

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

4 个答案:

答案 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>