-
在HTML 中,表单是由<form>元素来表示的,而在JavaScript 中,表单对应的则是HTMLFormElement 类型
- HTMLFormElement类型除了继承了HTMLElement的属性外,还具有一些独有的属性和方法,下面列举几点
- 通过document.forms可以获得页面中的所有表单,可通过数值索引或者name值来获得特定表单
1 var form=document.forms[0]; 2 console.log(form.name)//textForm, name是自定义的名字 3 console.log(form.elements[0].nodeName);//input, nodeName是标签名 4 //html中 5 <form name="textForm" value="aaa"> 6 <input type="text" name="text_1" > 7 <input type="text" name="text_2"> 8 </form>
2. form中提交表单的三种方法
<!-- 提交表单 --> <form> <input type="image" name=""> <input type="submit" name=""> <button type="submit"></button> </form>
如果需要阻止表单数据的提交,调用defaultPrevent()方法即可。一般来说,在表单数据无效而不能发送给服务器时,可以使用这一技术。
js中也可以通过或form.submit()方法提交表单。
3. 为了防止用户多次提交重复表单,可以第一次提交表单后就禁用提交按钮,或者利用onsubmit 事件处理程序取消后续的表单提交操作。
4. 重置表单
-
- 通过将type设置为reset,用户单击重置按钮重置表单时,会触发reset 事件,在重置表单时,所有表单字段都会恢复到页面刚加载完毕时的初始值
1 <!-- 充值表单 --> 2 <form> 3 <input type="text" name=""> 4 <input type="reset" name=""> 5 </form>
5. 表单的element属性。通过form.element[ ]可以访问form表单内的标签,如<input> <button> <textarea>等
6. 表单的属性
1 <!-- 表单属性 --> 2 <form id="field"> 3 <input type="text" name=""> 4 <input type="button" name=""> 5 <input type="radio" name=""> 6 </form>
1 //表单属性 2 var form=document.getElementById('field'); 3 var field=form.elements[0]//field调用第一个input 4 field.value="another value"; 5 console.log(field.form)//form; 6 field.focus()//焦点设置到当前字段 7 field.disabled=true;//禁用当前字段
value, form, focus和disabled等属性。
-
- 为了避免多次提交表单,可以这样设计
1 EventUtil.addHandler(form,"submit",function(){ 2 event=EventUtil.getEvent(event); 3 var target=EventUtil.getTarget(event); 4 5 var btn=target.element["submit-button"]; 6 btn.disabled=true; 7 })
7. 表单字段和方法
-
- 表单共有focus和blur两种方法
- focus()方法,比如可以在页面加载完毕,表单内就出现插入符号,等待用户输入。HTML5为表单增加了一个autofocus字段,可以直接设置
1 <input type="text" autofocus>
-
- blur()方法与focus()方法相反,将焦点移走。
-
change 事件在不同表单控件中触发的次数会有所不同。对于<input>和<textarea>元素,当它们从获得焦点到失去焦点且value 值改变时,才会触发change 事件。对于<select>元素,只要用户选择了不同的选项,就会触发change 事件;换句话说,不失去焦点也会触发change 事件。
- 文本框脚本
- <input>和<textarea>两个比较相似,区别在:
-
- 对于input来说,通过设置size 特性,可以指定文本框中能够显示的字符数。通过value 特性,可以设置文本框的初始值,而maxlength 特性则用于指定文本框可以接受的最大字符数
-
对于textarea来说,可以使用rows和cols 特性设置字符的行数和列数,但是不能设置最大字符数。
- 选择文本
- select()方法,可以将焦点设置到文本框内的同时选择所有的文本。所以可以通过设置这个方法快速的删除、复制文本框内的文本
- select()事件,一旦选择文本便可触发。通过selectionStart和selectionEnd来获取选择到的文本
1 //输出选择到的字符串 2 var textbox=document.getElementById('textbox'); 3 console.log(textbox.value); 4 textbox.onselect=function(){ 5 console.log(textbox.value.substring(textbox.selectionStart,textbox.selectionEnd)) 6 }
3. 选择部分文本,调用selectionRange(),传入两个参数,头和尾。
- 过滤输入
- 借助keypress事件,可以获得输入的字符(event.keycode/event.charCode),同时过滤输入的结果(借助preventDefault())。
- 操作剪贴板(比如你在淘宝买了一个帐号,复制帐号密码到剪贴板的时候,可以用这个功能)
-
- 使用clipboardData 对象,在IE中是window的属性,在在Firefox 4+、Safari 和Chrome 中,这个对象是相应event 对象的属性
- clipboardData 对象有三种方法,:getData()、setData()和clearData()
- HTML5约束
- 有一些必填的字段,借助required关键字
1 <input type="text" name="username" required>
2. 其他的输入类型
1 <input type="email" name ="email"> 2 <input type="url" name="homepage">
3. 数值范围
1 <input type="number" min="0" max="100" step="5" name="count">
4. 输入模式,借助正则限制
1 <input type="text" pattern="\d+" name="count">
5. 禁用验证
1 <form method="post" action="signup.php" novalidate>
- 选择框脚本
- 选择框是通过<select>和<option>元素创建的,通过text和value可以获取option的文本和值
1 <!-- 选择框 --> 2 <form id='selectForm'> 3 <select id="select_A"> 4 <option value="firstChoice">Choice 1</option> 5 <option>Choice 2</option> 6 <option>Choice 3</option> 7 </select> 8 <select id="select_B"> 9 <option>Choice 5</option> 10 <option>Choice 6</option> 11 </select> 12 </form>
1 //选择框JS 2 var formBox=document.getElementById('selectForm'); 3 var firstSelect=formBox.elements[0]; 4 console.log(firstSelect.options[0].text);//choice 1 5 console.log(firstSelect.options[0].value);//firstChoice
记住层级结构,forms内的元素可以通过elements[ ]来访问,select内的选择项,通过options[ ]来访问。
1 //firstSelect具有一个selectedIndex属性,返回选择项的下标 2 var selectedOption=firstSelect.options[firstSelect.selectedIndex]; 3 console.log(selectedOption.text)//choice 1
2. 通过add方法给下拉菜单添加选项
//动态的添加选项 var newOption=new Option("optionText","optionValue") firstSelect.add(newOption,undefined);
-
- Option包装成了对象,传入text和value两个参数
- add()方法,它的存在,专门为select表单来添加选项。
3. 移除选项
1 firstSelect.remove(3);//移除新的选项
- 表单序列化
- 浏览器是怎样将数据发送给服务器的?
-
- 对表单字段的名称和值进行URL 编码,使用和号(&)分隔
- 禁用的表单字段,type为reset和button的, 不发送。
2. 富文本编辑
-
- 又称所见即所得
1 <div id="richedit" style="height: 100px;width:100px;border: 1px solid black" ></div>
1 //添加富文本区域 2 var div=document.getElementById('richedit'); 3 div.contentEditable="true";
-
- 添加一些控件
1 <!-- 富文本 --> 2 <div id="richedit" style="height: 100px;width:100px;border: 1px solid black" ></div> 3 <div id="buttons"> 4 <button id="btn1" >打开编辑</button> 5 <button id="btn2" >关闭编辑</button><br /> 6 <button id='justifycenter'>居中</button> 7 <button id='justifyleft'>左对齐</button><br /> 8 <button id="italic">斜体</button> 9 </div>
1 EventUtil.addHandler(btn,'click',function(){ 2 event=EventUtil.getEvent(event); 3 var target=EventUtil.getTarget(event); 4 switch(target.id){ 5 case "btn1": 6 richedit.contentEditable=true; 7 break; 8 case "btn2": 9 richedit.contentEditable=false; 10 break; 11 case "justifycenter": 12 document.execCommand('justifyCenter'); 13 break; 14 case "justifyleft": 15 document.execCommand('justifyLeft'); 16 break; 17 case "italic": 18 document.execCommand("italic",false,null); 19 } 20 })
-
- 表单提交:因为富文本不是form控件实现的,所以需要将富文本中的innerHTML提交赋给表单,然后再提交给服务器
1 EventUtil.addHandler(form, "submit", function(event){ 2 event = EventUtil.getEvent(event); 3 var target = EventUtil.getTarget(event); 4 target.elements["comments"].value = frames["richedit"].document.body.innerHTML; 5 });
浙公网安备 33010602011771号