JS动态添加文本框,要取出文本框中的值,已经取到对象input,但取值的时候居然是undefined

<html>
<head>
<style>
.mydiv{
width:155;
height:500;
border:1px solid red;
}
</style>

<script>
function AddOne(){
var obj = document.createElement("input");
obj.name = "score";
mydiv.appendChild(obj);
}

function cal(){
//获取输入框中的值
var x = document.getElementsByName("score");
alert(x);//测试是否取到这个对象,结果是已经取到了
alert(x.value);

}
</script>
</head>

<body>
<form name="myform">

<div id="mydiv" class="mydiv">
</div>

<input type="button" value="加一个" onClick="AddOne()">
<input type="button" value="确认提交" onClick="cal()">
</form>

</body>
</html>

这种问题,测试一下就好了, 用appendChild 方式增加在页面上的元素, 在ie上是无法直接使用

document.getEementXX 的方式获取的,虽然在上述问题中注释说取到对象,原因是其实无论name写什么值,那个对象在ie上都是可以alert 一个 Object的。


针对IE 你可以考虑下面的写法:(至少ie8是可以的)

<html>
<head>
<style>
        .mydiv{
               width:155;
               height:500;
                border:1px solid red;
        }
</style>

<script>

            function AddOne(){
            /*
                var obj = document.createElement("input");
                obj.name = "score";
                mydiv.appendChild(obj);
            */    
                var html = "<input name= 'score'  />" ; 
                
                var divObj = document.getElementById("mydiv");
                
                divObj.innerHTML += html;
                
                
            }

            function cal(){
                //获取输入框中的值
                var x = document.getElementsByName("score");
                alert(x);//测试是否取到这个对象,结果是已经取到了
                
                for(var i = 0 ; i<x.length; i++)
                {
                  alert(x[i].value);
                }
                //alert(x.value);

            }
</script>
</head>

<body>
<form name="myform">

<div id="mydiv" class="mydiv">
 
</div>

<input type="button" value="加一个" onClick="AddOne()">  
<input type="button" value="确认提交" onClick="cal()">
</form>

</body>
</html>

追问

原来是这样,我在搜狗浏览器下测试了一下,我之前写的代码居然是行的,当然了改动了一下
var x = document.getElementsByName("score")[0];
alert(x);//测试是否取到这个对象,结果是已经取到了
alert(x.value);
关于节点的学习,你有没有好的资料推荐一下啊?

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-04-08
getElementsByName取到的是很多个元素,他们都有相同的name。如果想取得第一个name="score"的元素,应该写成var x = document.getElementsByName("score")[0];

如果要取得他的value,就写成var x = document.getElementsByName("score")[0].value;追问

对呀,可是它报错了

追答

......我明明答对了,为啥没给我最佳,桑心。

第2个回答  2014-04-09
createElement , 创建完 eval() 一下.在 取值追问

具体是怎样的?

追答

var html = "" ;
html = eval(html );


Warning: Invalid argument supplied for foreach() in /www/wwwroot/www.t2y.org3v3b34/skin/templets/default/contents.html on line 47
相似回答