1、一个表(form)里面有个同名(name)的控件doc,现在想用javascript循环取出控件里面的值。现在我用的方式是
for (var i=0;i<doc.length;i++)
alert(doc[i].value);
请问用for in方式的话,代码怎么写呢?
我写成:for (var c in doc) alert(c);
或者for (var c in doc) alert(c.value);
都不对。2、我如果想知道,是哪个控件应该怎么写呢?(如果不用id的话)<input name="doc" value="111" onfocus="test2(this)">
<input name="doc" value="222" onfocus="test2(this)">
<input name="doc" value="333" onfocus="test2(this)">
<script>
function test2(obj){
alert(obj.name); //只能显示doc
}
</script>就是说,我想知道是哪个doc,javascript代码应该怎么写呢?谢谢。

解决方案 »

  1.   

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title><style>
    *{margin:0; padding:0;}
    body{font-size:12px; color:#000; text-align:center;}
    </style>
    </head><body>
    <input name="doc" value="111">
        <input name="doc" value="222">
        <input name="doc" value="333">    <script>
    var inps = document.getElementsByTagName('input'),
    len = inps.length;

    for(var i = 0; i < len; i++){
    !function(i){
    inps[i].onfocus = function(){
    alert('第' + (i + 1) + '个获得了焦点值为' + this.value);
    };
    }(i);
    }
        </script>
    </body>
    </html>
      

  2.   

    var inps = document.getElementsByTagName('input')
    这句可以改成拿name
    var inps = document.getElementsByName('doc')
      

  3.   

    1、你这是个数组,用数字索引来访问,不要用 for in语句
    2、什么哪个doc?,你如果要区别,你可以设置一个唯一标识符,id什么的,来区分
      

  4.   

    总结:
    1、原来这样的数组,是不能用for in的,经过今次,知道了;
    2、我觉得应该不用id都可以处理,所以上来提问。终于如愿学到新知识了。
    我现在的代码根据我自己的需要修改了一下(因为我的控件数量会变化,所以用1楼的代码也不行,但根据他的提示得到我现在的代码):<div id="aaa">物件1:
    <input name="doc" class="txt" style="width:300" maxlength=30>
    <br>物件2:
    <input name="doc" class="txt" style="width:300" maxlength=30 onblur="addDoc(this)">
    </div>
    <script>
    var cn=2; //cn=control number,控件数量
    function addDoc(obj){
    if (obj.value!=""){ //非空才能再增加新文本框
    var inps = document.getElementsByName('doc');
    len = inps.length;
    if (obj==inps[len-1]){ //判断是否最后一个文本框 //同提问有关的是这句代码
    for (var i=0;i<len-1;i++){
    if (inps[i].value==""){
    inps[i].value=obj.value;
    obj.value="";
    return; //如果前面的文本框有空位,把最后的文本框内容,转换到前面的文本框
    }
    }
    cn++;
    obj.onblur=""; //只能是最后一个文本框,才能生成新的文本框,前面的失焦功能被去掉
    obj.title="";
    aaa.insertAdjacentHTML("beforeEnd", "<br>物件"+cn+": <input name='doc' class='txt'"
    +" style='width:300' maxlength=30 onblur='addDoc(this)'"
    +" title='填写完之后移开光标,会再增加新的文本输入框'>");
    }
    }
    }
    </script>还想请教一下HTML的机制,是怎样把obj从一堆相同的控件“doc ”中区别开来?
    代码还有很大的修改余地,希望各位高手不吝赐教。
      

  5.   


    addDoc(this)你每次添加一个input都有失去焦点这个方法调用。
    这里面不是有个this参数吗,就代表obj。(因为是对象,所以引用地址都不一样。)
    if (obj==inps[len-1]){    //判断是否最后一个文本框    //同提问有关的是这句代码
    像你这句话,就是在比较两个对象的引用。
    当他们相当的时候,也就是你失去焦点触发的那个input
      

  6.   

    楼主开始的问题,一不说了,自己实验一下alert(docs[c])就知道,二的话,用VALUE就可以了,因为它们的VALUE应该肯定是不相同的,就相当于ID了。不过楼主的困惑可能主要是对this的不了解,建议多看看它的说明就行了。