`

深入解析form标签

阅读更多
在Javascript中,页面上的每一对<form>标记都解析为一个对象,即form对象。

可以通过document.forms获取以源顺序排列的文档中所有form对象的集合。

如果一个表单对象定义如下:

<form name="frm1" method="post" action="login.aspx"> 


获得该表单对象的方法:

document.forms["frm1"];   // 根据name属性值  
document.forms[0];        // 根据索引号  
document.frm1;            // 直接根据name值获得对象 


form 表单应该注意的属性
elements:获取以源顺序排列的给定表单中所有控件的集合。但是<input type="image">对象不在此集合内。

var txtName = myform.elements[0];         //获得表单的第一个元素
var txtName = myform.elements["txtName"]; //获得name属性值为"txtName"的元素
var txtName = myform.elements.txtName;    //获得name属性值为"txtName"的元素


enctype:设置或获取表单的多用途网际邮件扩展(MIME)编码。这个属性的默认值为:application/x-www-form-urlencoded,如果要上传文件,则应该设置为:multipart/form-data。

form 表单中的<label>标记
每一个表单元素的文字描述都应该使用<label>标记。

该标记用于将文字绑定到对应的表单元素上,它的for属性指定它所要绑定的表单元素id值。绑定后单击该文字,鼠标将聚焦到对应的文本框中或选中对应的选项。

若安装了某些桌面主题,某些表单元素还会变换颜色来予以提示,这大大提高了用户体验。

示例代码:

<form method="post" name="frm1">
    <label for="txt">点我将聚焦到文本框</label>
    <input type="text" id="txt" name="myname">
<br/>
    <label for="rdo">点我将选中单选框</label>
    <input type="radio" id="rdo" name="male"/>
<br/>
    <label for="cbo">点我将选中复选框</label>
    <input type="checkbox" id="cbo" name="hobby">
</form>


注意:

每个表单元素应当尽量使用<label>标签来提高用户体验;
每个表单元素应当分配 name 属性和 id 属性。name 属性:用来将数据提交到服务器;id 属性:用来在客户端做相应的操作;如:<label>标签的绑定、CSS 选择器的使用等。 ( name 属性和 id 属性应该尽可能地使用相同的或相关的值。)
在客户端,Javascript对表单及表单元素的操作,更青睐于使用其name属性。因为,对于某些特定的表单元素(如:单选按钮等),使用其name属性更易于获得元素值,也更方便向服务器传送数据!

Javascript操作form表单元素,比较少用的属性:

defaultChecked 设置或获取复选框或单选钮的状态。
defaultValue 设置或获取对象的初始内容。
disabled 设置或获取控件的状态。

提交表单
提交表单的示例:

<form name="frm" method="post" action="javascript:alert('提交成功!');">
     <input type="button" value="提交功能" onclick="document.forms['frm'].submit();">
     <input type="button" value="禁用反复提交" onclick="this.disabled=true; this.form.submit();">
</form>


注意:

如果使用submit()方法来提交表单,则不会触发<form>表单元素的onsubmit事件,这是与用<input type="submit">提交元素不同的地方;
可以在按钮的提交或点击事件中,使用disabled 属性来禁用用户反复点击提交按钮的行为,减少服务器的响应负担;
设置文本框
控制文本框的字符个数:

<script language="javascript">
function LessThan(_textArea){
    //返回文本框字符个数是否符号要求的boolean值
    return _textArea.value.length < _textArea.getAttribute("maxlength");
}
</script>
<label for="name">文本框:</label>
<input type="text" name="name" id="name" value="姓名" maxlength="10"></p>
<br>
<label for="comments">多行文本框:</label>
<textarea name="comments" id="comments" cols="40" rows="4" maxlength="50" onkeypress="return LessThan(this);"></textarea>


注意:多行文本框<textarea>中的maxlength为自定义属性;如果在<textarea>中输入字符时,换行也算一个字符;

鼠标经过时,自动选中文本框:

<script language="javascript">
window.onload = function(){
    var txtName = document.getElementsByName("myName")[0];
    txtName.onmouseover = function(){
       this.focus();
    };
    txtName.onfocus = function(){
       this.select();
    };
}
</script>
<INPUT TYPE="text" NAME="myName" value="默认值被选中" />


实现了行为与结构的分离。

设置单选按钮
获取选中的单选按钮 & 设置单选按钮被选中:

<script language="javascript">
//获取选中项
function getChoice(){
    var oForm = document.forms["myForm1"];
    //radioName是单选按钮的name属性值
    var aChoices = oForm.radioName;
    //遍历整个单选项表
    for(i=0;i<aChoices.length;i++)   
        if(aChoices[i].checked)   
            break; //如果发现了被选中项则退出
    alert("您选中的是:"+aChoices[i].value);
}
//设置选中项
function setChoice(_num){
    var oForm = document.forms["myForm1"];
    //radioName是单选按钮的name属性值
    oForm.radioName[_num].checked = true; //其它选项的checked值会自动设置为false
}
</script>
//调用代码
<input type="button" value="获取选中项" onclick="getChoice();" />
<input type="button" value="设置第1项被选中" onclick="setChoice(0);" />


需要保证同一组单选按钮的name属性值相同即可。

设置复选框
设置复选框的“全选”、“全不选”及“反选”功能:

<script language="javascript">
function changeBoxes(_action){
    var myForm = document.forms["myForm1"];
    //myCheckbox 为所有复选框的name属性值
    var oCheckBox = myForm.myCheckbox;
 
    for(var i=0;i<oCheckBox.length;i++)    //遍历每一个选项
        if(_action < 0)//反选
            oCheckBox[i].checked = !oCheckBox[i].checked;
        else 
            //_action为1是则全选,为0时则全不选
            oCheckBox[i].checked = _action;
}
</script>
<form name="myForm1">
<input type="checkbox" name="myCheckbox">aa
<input type="checkbox" name="myCheckbox">bb
<input type="button" value="全选" onclick="changeBoxes(1);" />
<input type="button" value="全不选" onclick="changeBoxes(0);" />
<input type="button" value="反选" onclick="changeBoxes(-1);" />
</form>


设置下拉列表框
下拉列表框的multiple 属性用于设置或获取下拉列表框是否可以选中多个选项。

下拉列表框默认只能选中一项,若要设置为可以选中多项,则<select multiple = "multiple">即可。

type 属性:javascript语言根据type属性的值获得下拉列表框select控件的类型。

type 属性的值为:select-multiple 或 select-one(注意:下拉列表框的类型由multiple 属性控制)。

查看下拉列表框的选项(单选项 & 多选项):

<script language="javascript">
function getSelectValue(_myselect){
    var oForm = document.forms["myForm1"];
    //根据参数(下拉列表框的name属性值)获得下拉菜单项
    var oSelectBox = oForm.elements[_myselect];
    //判断是单选还是多选
    if(oSelectBox.type == "select-one"){
        var iChoice = oSelectBox.selectedIndex;    //获取选中项
        alert("单选,您选中了" + oSelectBox.options[iChoice].text);
    }
    else{
        var aChoices = new Array();
        //遍历整个下拉菜单
        for(var i=0;i<oSelectBox.options.length;i++)
            if(oSelectBox.options[i].selected)//如果被选中
              //压入到数组中
              aChoices.push(oSelectBox.options[i].text);
        //输出结果
        alert("多选,您选了:" + aChoices.join());
    }
}
</script>
<form method="post" name="myForm1">
<select id="mysel" name="mysel" multiple="multiple" style="height:60px;">
    <option value="a">AA</option>
    <option value="b">BB</option>
    <option value="c">CC</option>
</select>
<input type="button" onclick="getSelectValue('mysel')" value="查看选项" />


添加下拉列表框的选项

追加新选项到末尾:

<script language="javascript">
function AddOption(Box){ //追加选项到末尾
    var oForm = document.forms["myForm1"];
    var oBox = oForm.elements[Box];
    var oOption = new Option("乒乓球","Pingpang");
    oBox.options[oBox.options.length] = oOption;
}
</script>


插入新选项到指定位置:

<script language="javascript">
function AddOption(_select,_num){
    var oForm = document.forms["myForm1"];
    var oBox = oForm.elements[_select];
    var oOption = new Option("text值","value值");
    //兼容IE7,先添加选项到最后,再移动
    oBox.options[oBox.options.length] = oOption;
    oBox.insertBefore(oOption,oBox.options[_num]);
}
</script>
<input type="button" value="添加乒乓球" onclick="AddOption('myselect',1);" />


注意:如果直接使用insertBefore()方法插入选项,将会在IE中出现一个空选项的bug。为了解决IE的这个bug,只能使用先追加新选项到末尾,然后再使用insertBefore()方法将其移动到相应的位置。

类似这样:为了跳过浏览器的某些bug或限制,实现预定目的的小技巧,通常称之为hack。

替换某一选项:

<script language="javascript">
//替换选项
function ReplaceOption(_select,_num){
    var oForm = document.forms["myForm1"];
    var oBox = oForm.elements[_select];
    var oOption = new Option("text值","value值");
    oBox.options[_num] = oOption; //替换第_num 个选项
}
</script>
<input type="button" value="替换选项" onclick="ReplaceOption('selName',1);" />


通过oBox.options[_num] = oOption 直接将创建的新选项替换掉指定位置的选项。

删除某一选项:

<script language="javascript">
function RemoveOption(_select,_num){
    var oForm = document.forms["myForm1"];
    var oBox = oForm.elements[_select];
    oBox.options[_num] = null;    //删除选项
}
</script>
</head>
<body>
<select id="mysel" name="mysel" multiple="multiple">
......
<input type="button" value="删除选项" onclick="RemoveOption('mysel',1);" />


直接通过oBox.options[_num] = null 删除选项。
分享到:
评论

相关推荐

    MLDN+李兴华+Java+Web开发实战经典.part3.rar )

    16.4.1、&lt;html:form&gt;标签 16.4.2、与标签 16.4.3、标签 16.4.5、标签 16.4.6、标签 16.4.7、按钮标签 16.4.8、实例:编写基本表单 16.4.9、复选框标签 16.4.10、下拉列表框 16.5、本章摘要 16.6...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 上

    12.2、定义一个简单的标签 —— 空标签 12.3、定义有属性的标签 12.4、TagSupport类 12.5、定义有标签体的标签库 12.6、开发迭代标签 12.7、BodyTagSupport类 12.8、TagExtraInfo类和VariableInfo类 12.9、...

    李兴华 java_web开发实战经典 源码 完整版收集共享

    12.2、定义一个简单的标签 —— 空标签 12.3、定义有属性的标签 12.4、TagSupport类 12.5、定义有标签体的标签库 12.6、开发迭代标签 12.7、BodyTagSupport类 12.8、TagExtraInfo类和VariableInfo类 12.9、...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 下

    12.2、定义一个简单的标签 —— 空标签 12.3、定义有属性的标签 12.4、TagSupport类 12.5、定义有标签体的标签库 12.6、开发迭代标签 12.7、BodyTagSupport类 12.8、TagExtraInfo类和VariableInfo类 12.9、...

    李兴华Java Web开发实战经典.pdf (高清版) Part1

    12.2、定义一个简单的标签 —— 空标签 12.3、定义有属性的标签 12.4、TagSupport类 12.5、定义有标签体的标签库 12.6、开发迭代标签 12.7、BodyTagSupport类 12.8、TagExtraInfo类和VariableInfo类 ...

    李兴华 Java Web 开发实战经典 高清扫描版Part3

    12.2、定义一个简单的标签 —— 空标签 12.3、定义有属性的标签 12.4、TagSupport类 12.5、定义有标签体的标签库 12.6、开发迭代标签 12.7、BodyTagSupport类 12.8、TagExtraInfo类和VariableInfo类 12.9、...

    java web 视频、电子书、源码(李兴华老师出版)

    16.4.1、&lt;html:form&gt;标签 16.4.2、与标签 16.4.3、标签 16.4.5、标签 16.4.6、标签 16.4.7、按钮标签 16.4.8、实例:编写基本表单 16.4.9、复选框标签 16.4.10、下拉列表框 16.5、本章摘要 16.6...

    李兴华Java Web开发实战经典(高清版) Part2

    12.2、定义一个简单的标签 —— 空标签 12.3、定义有属性的标签 12.4、TagSupport类 12.5、定义有标签体的标签库 12.6、开发迭代标签 12.7、BodyTagSupport类 12.8、TagExtraInfo类和VariableInfo类 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    1.10 xml处理器/解析器 35 1.11 小结 36 第2章 xml名称空间 38 2.1 声明名称空间 38 2.2 名称空间在元素和属性中的运用 39 2.2.1 名称空间在元素中的运用 39 2.2.2 默认名称空间 41 2.2.3 名称空间在属性中...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    1.10 xml处理器/解析器 35 1.11 小结 36 第2章 xml名称空间 38 2.1 声明名称空间 38 2.2 名称空间在元素和属性中的运用 39 2.2.1 名称空间在元素中的运用 39 2.2.2 默认名称空间 41 2.2.3 名称空间在属性中...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    1.10 xml处理器/解析器 35 1.11 小结 36 第2章 xml名称空间 38 2.1 声明名称空间 38 2.2 名称空间在元素和属性中的运用 39 2.2.1 名称空间在元素中的运用 39 2.2.2 默认名称空间 41 2.2.3 名称空间在属性中...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    1.10 xml处理器/解析器 35 1.11 小结 36 第2章 xml名称空间 38 2.1 声明名称空间 38 2.2 名称空间在元素和属性中的运用 39 2.2.1 名称空间在元素中的运用 39 2.2.2 默认名称空间 41 2.2.3 名称空间在属性中...

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    Django之Form组件验证 作业 第23周 主机管理项目需求分析 主机管理项目架构设计 主机管理项目初始构建 主机管理项目编写插件基类 主机管理项目命令分发器 主机管理项目提取主机列表 主机管理项目提取yaml配置文件_...

    Java Web应用详解.张丽(带详细书签).pdf

    动态网站篇深入讲解Servlet、JSP、JavaBean、JDBC数据库连接、数据库连接池等Java Web开发的核心技术。系统框架篇则是以架构设计的高度,讲解搭建网站的三大框架Struts、Hibernate、Sprin9及标签库。项目实战篇详细...

    CSS网站布局实录 (第二版)PDF版

    4.4.5 使用label标签提升表单可用性 4.4.6 表单设计的其他建议 4.5 字体及段落样式设计 4.5.1 应用字体样式 4.5.2 应用段落样式 4.6 图片样式设计 4.6.1 图片定位 4.6.2 图片剪切 4.6.3 图片替代文本 4.6.4 Flash...

    Ext深入浅出 数据传输

    Ext深入浅出 数据传输 第10 章 数据存储与传输.....................................230 10.1 Ext.data简介............................................230 10.2 Ext.data.Connection....................230 ...

    SpringMVC理论与实战

    本课程是基于之前发布的“Spring理论与实战”课程,在Spring的基础之上讲解了...5.表单标签 Spring作为三层架构中的控制器存在,而本课程也是SSM的最后一门课程,希望大家学习完本课程后可以用SSM进行实战的企业级开发

    java面试题及技巧4

    │ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科面试题.pdf │ 速算.txt │ 面试题URL.txt │ ├─Javascript │ │ javascript资料(源码,教材,ppt).rar │ │ │ └─javascript资料...

    xheditor-1.1.14

    参数值:表单提交按钮的ID值,默认在form表单上绑定submit以同步结果 说明:通过本参数,在非标准submit提交环境下,比如AJAX提交,可以由用户点击提交按钮以触发编辑器最新值的同步 备注:v1.1.7新添加 onPaste:...

    [JavaScript.DOM高级程序设计](加)桑贝斯.扫描版.part3.rar

    第一部分 深入理解DOM脚本编程  第1章 遵循最佳实践   1.1 不唐突和渐进增强   1.2 让JavaScript运行起来   1.2.1 把行为从结构中分离出来   1.2.2 不要版本检测   1.2.3 通过平稳退化保证可访问...

Global site tag (gtag.js) - Google Analytics