在 IE8 F12 工具中出现此错误
我正在尝试编写不显眼的验证代码,其中我将在正文 onload 上调用 validate() 方法,它将根据其类名在元素的特定事件上附加验证代码。(例如,对于具有“必需”类的文本框,它将在其 onblur 上附加 required())
这个错误的原因是什么?
编辑
问题不在 getElementsByClassName() 方法中,因为它返回的元素数组具有所需的类,正如您在 IE8 手表中看到的那样
在 IE8 F12 工具中出现此错误
我正在尝试编写不显眼的验证代码,其中我将在正文 onload 上调用 validate() 方法,它将根据其类名在元素的特定事件上附加验证代码。(例如,对于具有“必需”类的文本框,它将在其 onblur 上附加 required())
这个错误的原因是什么?
编辑
问题不在 getElementsByClassName() 方法中,因为它返回的元素数组具有所需的类,正如您在 IE8 手表中看到的那样
试试这个解决方案 - 我对其进行了测试,它适用于您的代码段(您必须采用他在“更新:”段落中编写的代码):
javascript document.getElementsByClassName 与 IE 的兼容性
看起来getElementsByClassName
在 IE8 中不支持。
顺便说一句:这是一个完美的例子,为什么你应该使用 jQuery - 因为你不会有这样的问题:)
编辑:我这样测试它:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
function getElementsByClassName(node, classname) {
var a = [];
var re = new RegExp('(^| )'+classname+'( |$)');
var els = node.getElementsByTagName("*");
for(var i=0,j=els.length; i<j; i++)
if(re.test(els[i].className))a.push(els[i]);
return a;
}
window.onload = function() {
var a = getElementsByClassName(document.body,"required");
for(var i = 0;i < a.length;i++)
a[i].onblur = function() { alert("blured")};
};
</script>
</head>
<body>
<input class="required" type="text" name="uno" />
<input class="required" type="text" name="duno" />
</body>
</html>
getElementsByClassName
IE8 不支持。
你可以试试document.querySelectorAll
或document.querySelector
。它更灵活,使用起来非常舒适。
在您的情况下,它将是:
var a = document.querySelectorAll(".required");
您可以使用基本的 css 选择器来获取 DOM 元素,就像querySelector("#ID .class")
在 jQuery 中一样。