input事件
获取焦点 focus
当 标签获取焦点时,执行的执行
鼠标一点,就是获取焦点
不是所有的标签都支持获取焦点事件
常用: input,select,textarea,button,a,
输入事件 input
在输入框输入内容时,触发事件
每输入一个字符,没按动一次键盘,都会触发 输入事件
失去焦点 change
触发条件有两个条件,两个条件必须都满足才会触发事件
1.必须失去焦点
2.输入的数据内容,必须有改变
表单demo
htmlcssjs
<form action="./02_demo.html" method="get">
账号 : <input type="text" name="username" maxlength="16" placeholder="请输入8-16位账号"><br>
<div name="name">请您输入8-16位的账号</div>
密码 : <input type="password" name="userpwd1" maxlength="16" placeholder="请输入8-16位密码"><br>
<div name="pwd1">请您输入8-16位的密码</div>
确认密码 : <input type="password" name="userpwd2" maxlength="16" placeholder="请再次输入密码"><br>
<div name="pwd2">请您再次输入密码</div>
<button>注册</button>
</form>
div{
display: none;
margin: 20px 0 ;
}
// 1.获取标签对象
// 3个input标签对象
var oIptName = document.querySelector('[name="username"]');
var oIptPwd1 = document.querySelector('[name="userpwd1"]');
var oIptPwd2 = document.querySelector('[name="userpwd2"]');
// 3个div标签对象
var oDivName = document.querySelector('[name="name"]');
var oDivPwd1 = document.querySelector('[name="pwd1"]');
var oDivPwd2 = document.querySelector('[name="pwd2"]');
// 2.添加 获取焦点事件
// 鼠标点击标签,获取焦点时,执行的程序
oIptName.onfocus = function(){
// 让 对应的div 样式设定为 display:block
oDivName.style.display = 'block';
}
oIptPwd1.onfocus = function(){
// 让 对应的div 样式设定为 display:block
oDivPwd1.style.display = 'block';
}
oIptPwd2.onfocus = function(){
// 让 对应的div 样式设定为 display:block
oDivPwd2.style.display = 'block';
}
// 3.输入事件 每次敲击键盘,都会触发input事件
// 输入字符,提示还有几个字符可以输入
oIptName.oninput = function(){
// 获取标签中输入的内容
var nameStr = oIptName.value;
// 字符串都有length属性,属性值就是字符串长度,就是字符个数
// 根据输入的内容,改变div中标签内容
oDivName.innerHTML = `您需要至少输入8个字符,您当前输入了${nameStr.length}个字符,最多输入16个字符,还可以输入${16-nameStr.length}个字符`;
}
oIptPwd1.oninput = function(){
// 获取标签中输入的内容
var pwd1Str = oIptPwd1.value;
// 根据输入字符长度,输入提示信息
oDivPwd1.innerHTML = `您需要至少输入8个字符,您当前输入了${pwd1Str.length}个字符,最多输入16个字符,还可以输入${16-pwd1Str.length}个字符`;
}
oIptPwd2.oninput = function(){
// 获取标签中输入的内容
var pwd2Str = oIptPwd2.value;
// 根据输入字符长度,输入提示信息
oDivPwd2.innerHTML = `您需要至少输入8个字符,您当前输入了${pwd2Str.length}个字符,最多输入16个字符,还可以输入${16-pwd2Str.length}个字符`;
}
// 4.失去焦点事件
// 1,失去焦点,2,输入内容改变,才会触发事件
oIptName.onchange = function(){
// 1, 获取输入的数据
var nameStr = oIptName.value;
// 2, 根据输入数据的长度做判断
if( nameStr.length < 8 ){
// 错误格式,提示信息
// 修改input字体样颜色为红色,边框线为红色
oIptName.style.color = 'red';
oIptName.style.borderColor = 'red';
// 修改div中的提示信息
oDivName.style.color = 'orange';
oDivName.innerHTML = '您输入的账号格式不符合要求,请检查,并且重新输入';
}else{
// 正确格式的提示信息
oDivName.style.color = 'pink';
oDivName.innerHTML = '亲,您输入的内容,格式完全正确,棒棒哒,么么哒, ^_^!!!';
}
}
// 5.确认密码必须要和原始密码完全相同
// === 严格区分大小写
oIptPwd2.onchange = function(){
// 1,获取数据 获取 密码框 和 确认密码框 输入的数据
var pwd1Str = oIptPwd1.value;
var pwd2Str = oIptPwd2.value;
if(pwd1Str === pwd2Str){
oDivPwd2.innerHTML = '密码和确认密码相同';
}else{
oDivPwd2.innerHTML = '密码和确认密码不同';
}
}
submit提交事件
点击 form表单中 提交按钮 会触发事件
触发事件,首先执行的是JavaScript定义的默认事件---提交表单数据
可以通过 事件对象 e.preventDefault() ; 来 阻止默认事件的执行
submit事件demo
htmlcssjs
<form action="./02_demo.html" method="get">
账号 : <input name="username" type="text"> <span name="name"></span> <br>
密码 : <input name="userpwd" type="password"> <span name="pwd"></span> <br>
验证码 : <input name="uservc" type="text"> <span name="vc"></span> <span name="vvcc"></span> <br>
<button>注册</button>
</form>
//自己写
// 获取标签对象
var oIptName = document.querySelector('[name="username"]');
var oIptPwd = document.querySelector('[name="userpwd"]');
var oIptVc = document.querySelector('[name="uservc"]');
var oSpanVc = document.querySelector('[name="vc"]');
var oForm = document.querySelector('form');
var oSpanName = document.querySelector('[name="name"]');
var oSpanPwd = document.querySelector('[name="pwd"]');
var oSpanVVCC = document.querySelector('[name="vvcc"]');
// 1,添加验证码
oSpanVc.innerHTML = setVc();
// 点击 span标签,可以切换新的验证码
oSpanVc.onclick = function(){
oSpanVc.innerHTML = setVc();
}
// 给form表单,添加 submit 提交事件
oForm.onsubmit = function(e){
// 提交事件,应该先做验证
// 如果 验证没有通过 就不执行之后的程序
// 目前只能验证,输入数据的长度,对于内容的验证,使用正则表达式会更简单
// 目前验证,输入数据的长度和不能是空字符串
// 获取,账号,密码,验证码输入的数据
var nameVal = oIptName.value;
var pwdVal = oIptPwd.value;
var vcVal = oIptVc.value;
// 1,输入的账号进行验证
// 账号验证, 不能为空字符串 , 长度必须是 8-16 位
// 如果是 空字符串 或者 长度不在 8-16位 之间 我们就阻止表单的提交
if( nameVal === '' || !( nameVal.length >= 8 && nameVal.length <= 16 ) ){
e.preventDefault() ;
// 在 name的 span 中,写入提示信息
oSpanName.innerHTML = '您输入的账号不符和格式'
}else{
// 符合格式,输入空字符串,替换错误提示
oSpanName.innerHTML = '';
}
// 密码验证 不能为空字符串 , 长度必须是 8-16 位
if( pwdVal === '' || !( pwdVal.length >= 8 && pwdVal.length <= 16 ) ){
e.preventDefault() ;
// 在 pwd的 span 中,写入提示信息
oSpanPwd.innerHTML = '您输入的密码不符和格式'
}else{
// 符合格式,输入空字符串,替换错误提示
oSpanPwd.innerHTML = '';
}
// 验证码 输入的字符串不能为空
if( vcVal === ''){
e.preventDefault() ;
// 在 验证码的span 中,写入提示信息
oSpanVVCC.innerHTML = '您输入的验证码不能为空'
// 验证码 input中输入的数据,必须 和 之后 span 中写入的 字符串相同
// 如果不相同,就阻止表单的提交
// 如果要区分大小写,大小写敏感,直接 ===判断就可以
// 如果不分区大小写,大小写不敏感,可以统一都转化为大写或者小写
}else if( vcVal.toUpperCase() !== oSpanVc.innerHTML.toUpperCase() ){
e.preventDefault() ;
oSpanVVCC.innerHTML = '您输入的验证码错误'
}else{
// 符合格式,输入空字符串,替换错误提示
oSpanVVCC.innerHTML = '';
}
}
// 随机6位验证码 没有重复的字符
function setVc(){
var str = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
var vc = '';
for(var i = 1 ; i <= 6 ; i++){
// 从 0 - str.length-1 的所有索引下标的随机数
var num = parseInt( Math.random()*str.length );
if(vc.indexOf( str[num] ) === -1 ){
vc += str[num];
}else{
i--;
}
}
return vc;
}
提示
1, 必须要记住, submit 提交事件,是绑定给 form表单标签
不是绑定给 button标签
2, 目前只能做长度和空字符串的验证
内容的验证,要是用正则表达式来执行
3, 验证码:
(1) 随机验证码直接写入到 span标签中
比较判断的是 input输入框,输入的数据,与span标签的内容,是否一致
(2) 如果要区分大小写,就直接 === 判断
如果不要区分大小写,将字符串统一为大写,或者小写字符串

Comments | NOTHING