0

我有这个想法,我想尝试一下。我有一个表单,里面有一定数量的输入元素。我想运行一个函数,该函数将使用两个 for 循环打印出输入元素的类型。这是我尝试过的代码

                  function check(){         
                     var i = document.forms.length;
                     var j = document.forms[i-1].elements.length;
                    //alert(i);
                   //  alert(j);
                    for (var k=0; k<=i;k++){
                    //alert(l);
                         for (var l=0;l<=j;l++){  
                          //alert(l);
                          alert(document.forms[k].elements[l].type);
                          }
                      }
                  }  

该代码仅打印出表单中第一个元素的类型。我究竟做错了什么 ?

4

4 回答 4

2

获取页面中的所有表单,遍历每个表单,在第一个循环中获取特定于当前正在迭代的表单的元素,遍历元素并获取类型,尝试这样做:

var frms = document.forms;
for(var f = 0; f < frms.length; f++ ) {
    var elems = frms[f].elements;
    for(var e = 0; e < elems.length; e++ ) {
        console.log( elems[e].type );
    }
}

演示:: jsFiddle

于 2013-09-06T09:45:55.673 回答
0

你可以使用querySelectorAll吗?

var elems = document.querySelectorAll("form input");
for(var i in elems) {
  console.log(elems[i].type);
}

如果没有,您需要计算第一个for循环中表单的元素:

function check(){         
  var i = document.forms.length;       
  for (var k=0; k<i;k++){
    // Check the element length here
    var j = document.forms[k].elements.length;
    for (var l=0;l<j;l++){  
      alert(document.forms[k].elements[l].type);
    }
  }
 }  
于 2013-09-06T09:42:54.400 回答
0

我尝试了您的脚本,并在以下修改中运行良好:

第一个循环for (var k=0; k<=i-1;k++){

第二循环for (var l=0;l<=j-1;l++){

否则你有一个错误,因为所有循环都执行了 +1 次。

于 2013-09-06T09:43:42.420 回答
0

我写了简单的 jsfiddle 示例 - http://jsfiddle.net/REb64/

      function check(){   
        for (var i=0; i < document.forms.length; i++){
          for (var j=0; j < document.forms[i].elements.length; j++){
            alert(document.forms[i].elements[j].type);
          }
        }
      }
于 2013-09-06T09:48:37.803 回答