关于javascript的form对象



首先看下面的代码:

复制代码

<form  name='fform' >
    
<select name="do" class="" size="" >
        
<option value="1">1</option>
        <option value="2">2</option>
    </select>
    <input name='a' type='button' onclick='init(this.form);' value='have fun'/>
</form>

<script type="text/javascript">
    
function init(fform){
        
//fform.do.options[fform.do.selectedIndex].value
        abc = fform['do'].options[fform['do'].selectedIndex].value
        alert(abc);
    }
</script>
复制代码


在JS代码中,上面注释掉的写法可以在FF中正常运行,但是在IE中不可以。因为do是ie版js的关键字。但是改成['do']就可以了,这再次说明js中的对象和

数组在使用中近似可以看做是一回事儿。

第二,如果我不想传递一个this.form进去,就可以写成这个样子:

复制代码
<form  name='fform' >
    
<select name="do" class="" size="" >
        
<option value="1">1</option>
        <option value="2">2</option>
    </select>
    <input name='a' type='button' onclick='init();' value='have fun'/>
</form>
<script type="text/javascript">
function init2(){
        abc 
= document.forms['fform']['do'].options[document.forms['fform']['do'].selectedIndex].value
        alert(abc);
    }
</script>
复制代码


这种写法也是兼容IE和FF的,大家很容易知道原理啦,就是documents对象中有一个forms[]来存放所有的表单对象。


第三,如果我写成这个样子,会有什么结果呢?

复制代码
<script type="text/javascript">
    
function init(fform){
        abc 
= fform['do'].options[fform['do'].selectedIndex].value
        alert(abc);
    }
    
function init2(){
        abc 
= document.forms['fform']['do'].options[document.forms['fform']['do'].selectedIndex].value
        alert(abc);
    }

</script>
    <form  name='fform' >
            
<select name="do" class="" size="" >
                    
<option value="1">1</option>
                    <option value="2">2</option>
            </select>
            <input name='a' type='button' onclick='init(this.form);' value='have fun'/>
            <input name='a' type='button' onclick='init2();' value='have fun2'/>
        </form>
        <hr />
    <form  id='fform' >
            
<select id="do" class="" size="" >
                    
<option value="3">3</option>
                    <option value="4">4</option>
            </select>
            <input name='a' type='button' onclick='init(this.form);' value='have fun'/>
            <input name='a' type='button' onclick='init2();' value='have fun2'/>
        </form>
复制代码


答案是:在FF中init()方法正常,但是init2方法永远只能得到1和2,这与两个form的顺序有关,如果把id='fform'的form写在上面,就只能得到3和4。 这

说明在FF中,document.forms里只能存第一个出现的同名对象,无论这个名称是来自id,还是来自name.
    在IE中,init2()方法会报错。。。所以ie中是不能取重名元素的。

第四,……学习中

------------------------------------

附一个我认为比较 “正常的” 得到select和 radio的值的方法

 

复制代码
Code
var $ = function(id){
    
return document.getElementById(id);
}    
var radio_value = function(name){
    
var   obj   =   document.getElementsByName(name);   
      
for   (i=0;i<obj.length;i++){   
          
if   (obj[i].checked){   
          
return obj[i].value;   
      }   
     }
    
return 0;
}

var select_value = function(id){
    
var obj = $(id);
      
for   (i = 0 ; i < obj.options.length ; i++){   
        
if(obj.options[i].selected){
            
return obj.options[i].value;
        }
    }
    
return 0;
}
复制代码

posted @   玉米疯收  阅读(2743)  评论(2编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示