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代码应该怎么写呢?谢谢。
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代码应该怎么写呢?谢谢。
<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>
这句可以改成拿name
var inps = document.getElementsByName('doc')
2、什么哪个doc?,你如果要区别,你可以设置一个唯一标识符,id什么的,来区分
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 ”中区别开来?
代码还有很大的修改余地,希望各位高手不吝赐教。
addDoc(this)你每次添加一个input都有失去焦点这个方法调用。
这里面不是有个this参数吗,就代表obj。(因为是对象,所以引用地址都不一样。)
if (obj==inps[len-1]){ //判断是否最后一个文本框 //同提问有关的是这句代码
像你这句话,就是在比较两个对象的引用。
当他们相当的时候,也就是你失去焦点触发的那个input