这篇文章的主要目的是介绍表单相关的知识,如表单基础知识、文本框脚本相关用法、选择框脚本相关用法以及等知识。虽然在现代web开发中,不多会使用form默认行为提交表单数据,而是会禁用默认行为,而后使用Ajax方式经过POST请求异步提交表单数据。可是这并不表明form表单不重要了。form表单仍然是提交表单最快的方式,由于JavaScript提供了许多属性和方法让咱们快速获取表单字段的值。因此,对form的理解和掌握仍是颇有必要的。javascript
获取HTML中的Form标签能够经过id、class、name属性获取,或者直接经过form标签获取。固然,也可使用document.forms
获取HTML中全部表单元素,会返回一个NodeList对象。java
说一个重要的web
elements: document.forms[0].elements
返回类数组对象,包含该form表单下全部表单字段。能够经过表单字段的name属性或者索引访问.正则表达式
let form = document.forms[0] form.element[0] === form.element['index-0']
在form表单上的方法有submit、reset方法。在现代web开发中,都会阻止form表单提交的默认行为。当没有参数时,能够在不点击按钮的状况下将全部表单字段的值向服务器提交数据。一般,存在如下三种按钮能够提交表单数据。数组
<input type="submit" value='提交' /> <button type='submit'>提交</button> <input type="image" src='pic.png' />
submit: 当给form表单绑定submit事件,在点击图像按钮或者type为submit的按钮会提交表单数据。此时能够经过事件对象阻止表单全局提交的默认行为。在提交表单时,为避免用户屡次点击致使屡次提交的问题,能够在提交后禁用提交按钮。浏览器
都比较简单,有以下:服务器
<input type="text" autofocus />
。支持此事件的浏览器包括IE10+、Chrome、Firefox。因此支持的浏览器的autofocus会返回true,不支持时会返回空字符串。focus()、blur():一般会结合blur方法使用。好比在DOMContentLoaded事件以后让某个input元素得到焦点,让用户能够直接输入。异步
document.addEventLitener('DOMContentLoaded', e => { let input = docuemnt.querySelector('.input-1') input.focus() }, false)
focus、blur事件:在实际业务中,能够结合使用focus和blur事件。如input节点得到焦点时,改变input元素颜色。在失去焦点时,将背景颜色重置。url
let input = document.querySelector('.input-0') input.addEventListener('focus', e => { e.target.style.backgroundColor = '#ccc' }, false) input.addEventListener('blur', e => { e.target.style.backgroundColor = '#fff' }, false)
change事件:对于input和textarea元素,当它们从得到焦点到失去焦点而且value值发生改变时,才会触发change事件。而对于select元素,只要value值发生改变时就会触发change事件。换句话说,没有失去焦点也会触发change事件。这个细节须要注意。代理
除了以上表单字段的共有属性和方法以外,文本框存在本身的一些属性和操做文本的一些方法。
// type为number时,能够指定min,max,step(表示某个值得倍数)属性 <input type="number" min='0' max='100' step='5' name='count'> // 此时正则默认添加了^, $,即如下正则等于'^\d+$' <input type='text' pattern='\d+'>
1.select方法:input和textarea元素都支持selct方法。这个方法不接受任何参数,表示选择某个文本框元素的全部文本
// 当input元素得到焦点是选择文本 let input = document.querySelector('.input-1') input.addEventListener('focus', e => { e.target.select() }, false)
2.setSelectionRange方法:这个方法用于选择部分文本内容。接受两个参数,起始位置和结束位置。HTML5新增的方法。IE9+以上浏览器支持。
// 当input得到焦点时,选择文本中的第二个值 let input = document.querySelector('.input-1') input.addEventListener('focus', e => { let target = e.target console.log(target.setSelectionRange(1, 2)) }, false)
3.select事件:当文本框元素中的文本被选中时,就会触发select事件。只要选中文本就会触发,不须要全选。
4.selectionStart, selectionEnd属性:这两个属性用于或者用户选中的文本内容。所以,能够与select事件结合使用,获取用户选中的文本内容。HTML5新增的两个属性。IE9+以上浏览器支持。
let input = document.querySelector('.input-1') input.addEventListener('select', e => { let target = e.target let start = target.selectionStart let end = target.selectionEnd console.log(target.value.slice(start, end)) }, false)
文本框的过滤输入主要是某些文本的输入是有条件的。好比说须要input元素中只容许输入数字。这时候就须要用到文本的过滤。基本思路以下
1.经过监听keypress事件,判断输入时的字符是不是数字。经过charCode判断。keypress事件会在用户按下键盘上的【字符键】时触发。
2.若是不是,则取消默认行为,即取消文本的输入。
let input = document.querySelector('.input-1') input.addEventListener('keypress', e => { let charCode = e.charCode if (!/[\d+.+-]/g.test(String.fromCharCode(charCode))) { e.preventDefault() } }, false)
此方法经过charCode属性来判断用户输入的字符是不是数字字符,若是是则能够输入,若是不是则禁止输入。这里要注意的是,不能经过input的value属性来判断。由于keydown和keypress事件会在value改变以前触发,而keyup事件则是在value发生改变以后触发。所以,keypress获取value值是上一次的值,可是keypress事件能够获取到按下键盘时的charCode属性,而后经过String对象的fromCharCode转成对应的字符,根据此字符作一次正则验证便可。同时,charCode属性只有在keypress事件才存在,在keydown和keyup事件中都会返回0。
这种应用主要用于手机号码上。如手机号码能够分为'334'的结构。所以能够建立三个input,当输入完毕时自动切换焦点到下一个input上。
// 必须设置最大值 <input type="text" name='text1' maxlength="3"> <input type="text" name='text2' maxlength="3"> <input type="text" name='text3' maxlength="4"> // 当value的length等于maxleng时,发生跳转 function judge (len, max, target, form) { if (len === max) { let length = form.elements.length for (let i = 0; i < length; i++) { if (target === form.elements[i]) { if (form.elements[i + 1]) { form.elements[i + 1].focus() } } } } } // 给三个input绑定keyup事件,经过事件代理方式。 document.addEventListener('keyup', e => { let target = e.target let form = target.form let len = target.value.length let maxLen = target.maxLength switch (target.name) { case 'text1': judge(len, maxLen, target, form) break case 'text2': judge(len, maxLen, target, form) break case 'text3': judge(len, maxLen, target, form) break } }, false)
选择框是经过select和option元素组合而成的。除了表单字段共有的属性和方法以外,在这两个元素上提供了其余的属性和方法。目的是为了更加方便的操做选择框元素。