我正在尝试在JavaScript中创建一个类来验证表单。这将检查表单元素并验证字段是否具有特定属性。
但是,对getAttribute
的调用未返回值。它没有在另一个变量中获取值,但是,如果我打印,它运行良好。
这是我班级的代码:
function valida() {
document.getElementById("msgDiv").innerHTML="";
var totalErros=0;
var x=document.getElementById("frm1");
for (var i=0;i<x.length;i++){
var input=document.getElementsByTagName("input")[i];
var campo=input.getAttribute("id");
var tipo=input.getAttribute("tipo");
var nome=input.getAttribute("nome");
var id=campo.toString(); //the error goes here
//var valor=_$(id).value;
alert(campo);
switch (tipo) {
case "obrigatorio":
if(document.getElementById(id).value==""){
document.getElementById("msgDiv").innerHTML+="Deu erro no campo "+nome+"<br />";
totalErros++;}
break
case "oemail":
if(document.getElementById(id).value==""){
document.getElementById("msgDiv").innerHTML+="Deu erro no campo "+nome+"<br />";
totalErros++;}
break
case "email":
if(!ValidaEmail(document.getElementById(id).value)){
document.getElementById("msgDiv").innerHTML+="O "+nome+" que você informou é inválido "+document.getElementById(id).value+" <br />";
totalErros++;}
break
default:
document.getElementById("msgDiv").innerHTML+="<br />";
}
}
if(totalErros==0) {
document.getElementById("msgDiv").innerHTML="Agora foi "+ totalErros;
return true;
}
}
答案 0 :(得分:2)
你的问题是:
var input=document.getElementsByTagName("input")[i];
var campo=input.getAttribute("id");
//...
var id=campo.toString(); //the error goes here
您将获得一个给定的输入元素并将其存储在变量input
中。然后,您将获取该元素的ID并将其存储在变量campo
中。然后你拿campo
并在上面调用toString()。
问题是至少有一个输入元素没有ID。由于您无法在toString
上致电null
,因此会收到错误。
您实际上并不需要首先致电toString()
。只需按原样使用campo
即可。它将为null(如果没有ID)或字符串。
答案 1 :(得分:1)
这部分代码引起了我的好奇心:
var x=document.getElementById("frm1");
for (var i=0;i<x.length;i++){
var input=document.getElementsByTagName("input")[i];
这会在您的网页上收集所有 <input>
元素,并且每次都会i
一个; ;谁知道你可能得到什么输入元素。
如果您只想遍历您感兴趣的表单元素,这会更容易,更快:
var x = document.getElementById('frm1'),
input,
campo;
for (var i = 0, n = x.length; i != n; ++i) {
input = x.elements[i];
if (campo = input.id) {
// rest of your code
}
}
如您所见,我使用id
属性而不是id
属性;这通常是一件好事,因为属性的变化可能并不总是反映在相应的属性中。
此外,.toString()
是多余的,如果不是null,它已经是一个字符串。
<强>更新强>
正如@bfavaretto在评论部分指出的那样,这部分代码也可以简化:
if(document.getElementById(id).value==""){
到此:
if (input.value == '') {
无论输入元素是否具有id
,这都会有效