Javascript 无法使document.getElementByID正常工作
由于某些原因,以下函数不起作用。有人能看出问题出在哪里吗Javascript 无法使document.getElementByID正常工作,javascript,asp.net,Javascript,Asp.net,由于某些原因,以下函数不起作用。有人能看出问题出在哪里吗 function checkMaxLen(txt, maxLen) { var actualLen = txt.value.length; var remain = maxLen - actualLen; document.getElementById('remainChar').Value = remain; } 每当我尝试运行该函数时,都会出现以下错误: Microsoft JScript运行时错误:无
function checkMaxLen(txt, maxLen) {
var actualLen = txt.value.length;
var remain = maxLen - actualLen;
document.getElementById('remainChar').Value = remain;
}
每当我尝试运行该函数时,都会出现以下错误:
Microsoft JScript运行时错误:无法设置属性“value”的值:对象为null或未定义
区分大小写:
document.getElementById('remainChar').value
区分大小写:
document.getElementById('remainChar').value
检查最终HTML中输入的ID。由于您有
runat=“server”
ASP.NET可能会添加其典型的容器前缀。请检查最终HTML中输入的ID。由于您有runat=“server”
ASP.NET可能会添加其典型的容器前缀。主要问题:没有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
}
函数checkMaxLen(txt,maxLen){
var actualLen=txt.value.length;
var剩余=最大值-实际值;
document.getElementById(“”).value=remaine
}
注意:感谢Ian在我的原始答案中指出了一个重要的疏忽。主要问题:没有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
}
函数checkMaxLen(txt,maxLen){
var actualLen=txt.value.length;
var剩余=最大值-实际值;
document.getElementById(“”).value=remaine
}
注意:感谢Ian在我的原始答案中指出了一个重要的疏忽。.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>
函数checkMaxLen(txt,maxLen){
var actualLen=txt.value.length;
var剩余=最大值-实际值;
document.getElementById('remainChar')。value=remain;
}
checkMaxLen({值:},20);
.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>
函数checkMaxLen(txt,maxLen){
var actualLen=txt.value.length;
var剩余=最大值-实际值;
document.getElementById('remainChar')。value=remain;
}
checkMaxLen({值:},20);
可能是时间问题,remainChar
在您尝试读取它时还不存在。顺便说一句,Value
应该是Value
;)。何时调用此函数?@Teemu基于函数的名称和函数的用途,我确信它在正确的时间被调用。我敢打赌id
不是“雷曼查尔"ASP.NET有时也会对其进行修改。但问题是,当我在另一个文件中键入内容时,它找不到元素textbox@Ian我同意,因为似乎也定义了txt.value
。可能需要更多的代码来解决这个问题。可能是时间问题,remainChar
在您尝试阅读时还不存在。BTW,Value
应该是Value
;)。什么时候调用这个函数?@Teemu根据函数的名称和函数的用途,我确信它在正确的时间被调用。我敢打赌,id
不是“remainChar”,而是像有时一样被ASP.NET修改。但问题是,当我在另一个文件中输入时,它并没有找到元素textbox@Ian我同意,因为似乎也定义了txt.value
。也许需要更多的代码来解决这个问题。它只有在容器中才会有容器前缀:)非常正确-虽然问题中没有足够的信息来知道问题是否存在。但是你是对的!我认为这就是问题所在。如果使用母版页,或者母版页位于转发器或类似设备中,则控件将具有修改的id。因此,解决方案是使用document.getElementById(“”)
或任何语法,这可能是问题所在。您可能必须使用
来获取输入的实际呈现ID。谢谢您,这就是问题所在。只有在容器中才会有容器前缀:)非常正确-尽管问题中没有足够的信息来确定问题是否存在。但您是对的!我想