PS:本博客中的添加函数、阻止默认行为等方法依照封装的basic.js
获取form的所有方法
submit事件
PS:submit按钮是是无法通过input来触发,必须把submit绑定到form,由form触发submit
//html部分
<body>
<form id="myForm" name="yourForm">
姓名:<input type="text" name="user"/>
<input type="radio" name="sex" value="男" checked="checked"/>男
<input type="radio" name="sex" value="女"/>女
<input type="reset" value="重置"/>
<input id="sub" type="submit" value="提交"/>
</form>
addEvent(window,'load',function(){
var sub = document.getElementById('sub');
addEvent(sub,'submit',function(evt){ //通过input阻止是无效的
preDef(evt);
})
addEvent(window,'load',function(){
var fm = document.getElementById('myForm');
addEvent(fm,'submit',function(evt){
preDef(evt); //阻止默认事件 有效
})
})
//使用fm.submit()让非sumbit按钮实现提交
addEvent(window,'load',function(){
var btn = document.getElementById('btn');
addEvent(btn,'click',function(){
fm.submit(); //可以让非submit按钮提交表单
})
})
//ctrl+enter实现提交
addEvent(window,'load',function(){
addEvent(document,'keydown',function(evt){
var e=evt||window.event;
if (e.ctrlKey&&e.keyCode==13) {
fm.submit();
};
})
// PS:在表单中尽量避免使用name='submit'或id='submit'等命名,这样会导致和submit()方法发生冲突导致无法提交
})
//重复提交
//PS:提交数据最大的问题就是重复提交表单,因为各种问题,当一条数据提交到服务器的时候会出现延时等长时间没反应,导致用户不停的点击,从使得重复提交了很多相同的请求,或造成错误,或写入数据库多条相同的信息
addEvent(window,'load',function(){
var fm = document.getElementById('myForm');
var flag = false;
//阻止提交
addEvent(fm,'submit',function(evt){
preDef(evt);
//方法一(这种方法仅限于通过提交按钮防止重复提交的)
document.getElementById('sub').disabled=true; //第一次提交后,将按钮禁用
//方法二 (方法一和方法二结合使用,完美)
if (flag==true) return;
flag=true; //表示我已经提交过一次了
alert('提交');
//模拟延时
setTimeout(function(){
fm.submit();
},5000)
})
})
//公有的表单字段方法 :focus() 和 blur()
var user = fm.elements['user'];
user.focus(); //将焦点移入
user.blur(); //将焦点移除
//表单共有的字段事件:focus;blur ;change
var user = fm.elements['user'];
addEvent(user,'focus',function(){
alert('lll');
})
addEvent(user,'blur',function(){
alert('lll');
})
addEvent(user,'change',function(){
alert('lll');
})
form中的input textarea文本
ps:在html中input有value属性,textarea没有value属性
在js中input和textarea都有value属性
//html部分
<body>
<form id="myForm" name="yourForm">
姓名:<input type="text" name="user" value="text" /><br/>
<p id="p"></p>
<textarea name="content">textarea</textarea>
</form>
</body>
//使用标准DOM获取
// alert(user.getAttribute('value'));
// alert(content.getAttribute('value')); //IE可获取,非IE获取不到
// alert(user.getAttribute('value')); //标准DOM无法获取更改后的value值
选定文本
//选定文本方法
user.select(); //选定文本
//选定部分文本方法(从第n个位置到第m个位置)
user.setSelectionRange(0,1); //选定从第0个位置到第1个位置的文本
user.setSelectionRange(0,user.value.length); //选择全部
//IE选择部分文本(IE从n个开始选择m个)
var range = user.createTextRange();
range.collapse(true); //将文本指针移到开头
range.moveStart('charater',0); //逐字移动 ,0开始
range.moveEnd('charater',1); // 同上
rage.select()
//跨浏览器选定部分文本
function getSelectText(text,start,num){
if (text.setSelectionRange) {
text.setSelectionRange(start,num);
text.focus();
}else if(text.createTextRange){
var range = user.createTextRange();
range.collapse(true);
range.moveStart('charater',start);
range.moveEnd('charater',num-start); //用最后的位置-开始的位置=个数
rage.select();
}
}
getSelectText(user,2,3);
//取得选择的文本
addEvent(user,'select',function(){
// alert(this.selectionStart);
// alert(this.selectionEnd); alert(this.value.substring(user.selectionStart,user.selectionEnd)); //IE不支持
})
//兼容取得部分文本
addEvent(window,'load',function(){
var fm = document.getElementById('myForm');
var user = fm.elements['user'];
var content = fm.elements['content'];
addEvent(user,'select',function(){
document.getElementById('p').innerHTML==getSelectText(user);
})
function getSelectText(text){
if(typeof selectionStart=='number'){
return text.value.substring(text.selectionStart,text.selectionEnd);
}else if(document.selection){
return document.selection.createRange().text;
}
}
})
过滤输入模式(两种模式)
//模式1.禁止或屏蔽非数字键的输入,阻止非数字键的默认行为即可
//屏蔽非数字键的输入
addEvent(content,'keypress',function(evt){
var e=evt||window.event;
var charCode=getCharCode(evt);
// alert(charCode);
// alert(String.fromCharCode(charCode)); //将编码转换成自己本身 1就是1 a就是a
//正则表达式来获取文本是否为数字
if(!/\d/.test(String.fromCharCode(charCode))&&charCode>8){
preDef(evt); //屏蔽非数字键盘的使用
}
})
//模式2.验证后取消,你可以先输入非法字符,判断后,取消你刚输入的文本
//验证数据非法后取消输入
addEvent(content,'keyup',function(evt){
this.value=this.value.replace(/[^\d]/g,''); //将非数字键转换成空
})
自动切换焦点
addEvent(window,'load',function(){
var fm = document.getElementById('myForm');
var user = fm.elements['user'];
var content = fm.elements['content'];
//自动切换焦点
addEvent(fm.elements['a1'],'keyup',tabForWard);
addEvent(fm.elements['a2'],'keyup',tabForWard);
addEvent(fm.elements['a3'],'keyup',tabForWard);
function tabForWard(evt){
var e=evt||window.event;
//判断当前的长度是否和输入的长度一致
if(this.value.length==this.maxlength){
//遍历所有控件
for(var i=0;i<fm.elements.length;i++){
if(fm.elements[i]==this){
fm.elements[i+1].focus();
return;
}
}
}
}
})
选择脚本 选择框脚本是通过和元素创建的
//html部分
<form id="myForm" name="yourForm">
<select name="city" >
<option value="上海">上海s</option>
<option value="南京">南京s</option>
<option value="南昌">南昌s</option>
<option>无</option>
</select>
</form>
//js部分
/*
选择框脚本
选择框脚本是通过<select>和<option>元素创建的
// alert('city');
// city.multiple=true;
// city.size=6;
// alert(city.options.length);
// alert(city.options[0]);
// alert(city.type) //判断是单行还是多行
// alert(city.options[0].value+city.options[0].text) //上海上海s
//value和text使用的是HTML DOM 方法,
//使用标准DOM(不建议使用)
// alert(city.options[0].getAttribute('value')+city.options[0].firstChild.nodeValue) //上海s
// alert(city.options[4].value)
//addEvent(city,'change',function(){
// alert(this.selectedIndex); //得到当前选项卡的索引
// alert(this.options[this.selectedIndex].value+'----'+this.options[this.selectedIndex].text);
// })
//这个定位必须在select对象上
// city.selectedIndex=4; //定位到某个索引
//这个定位必须在option对象上
city.options[1].selected='true'; //定位到某个索引
//select和seletIndex在用途上的最大区别是selected返回的是布尔值,座椅一般用于判断,selectedIndex返回的是数值,一般用于设置和获取
addEvent(city,'change',function(){
if (city.options[3].selected) {
alert('正确');
}else{
alert('错误');
}
})
//标准DOM添加选项
var option = document.createElement('option');
var text = document.createTextNode('萍乡s');
city.appendChild(option);
option.setAttribute('value','萍乡')
option.appendChild(text);
//使用option构造函数添加
var option = new Option('杭州s','杭州');
// city.appendChild(option); //IE不兼容
//使用add方法来添加选项
city.add(option,0); //0非IE不兼容
city.add(option,null); //null表示不存在的位置,但本身存在
city.add(option,undefined); //最佳兼容方案
// 标准DOM移除选项
// city.removeChild(city.options[0]);
// city.remove(0);
// city.remove(0);
// city.remove(0);
// city.options[0]=null;
//移动选项
addEvent(city,'click',function(){
info.appendChild(this.options[city.selectedIndex]);
})
*/
addEvent(window,'load',function(){
var fm = document.getElementById('myForm');
var city = fm.elements['city'];
// var info = fm.elements['info'];
// alert(city.selectedIndex)
// alert(city.options[0].index)
//交换位置
var option1 =city.options[2];
// var option2 = city.options[2];
city.insertBefore(option1,city.options[option1.index-1]);
})