javascript--35--表单事件 键盘事件

表单事件

  1. 表单基本布局
<form action="" class="user-reg">
  <label class="form-item">
    <strong>用户名:</strong>
    <p>
      <input type="text" name="username">
    </p>
  </label>
  <label class="form-item">
    <strong>密码:</strong>
    <p>
      <input type="text" name="psw">
    </p>
  </label>
  <label class="form-item">
    <strong>简介:</strong>
    <p>
      <textarea name="des" id="" cols="30" rows="4"></textarea>
    </p>
  </label>
  <label class="form-item">
    <p class="form-btn">
      <button type="button">注册</button>
      <button type="button">重置</button>
    </p>
  </label>
</form>
  1. 自动获取焦点 在登陆注册界面自动获取焦点 焦点事件:除了可以获得光标的元素有此事件外,window也有这个事件
var oForm = document.querySelector('.user-reg'),
        oUserName = oForm.querySelector('input[name=username]'),//使用css选择器的方式获取
        oPassword = oForm.querySelector('input[name=psw]'),
        oNum = oForm.querySelector('input[name=num]'),
        oDes = oForm.querySelector('textarea'),
        oLike = oForm.querySelector('select'),
        oBtnBox = oForm.querySelector('.form-btn'),
        oBtns = oBtnBox.querySelectorAll('button');
//监听获取焦点事件
      oUserName.addEventListener("focus",function () {
          console.log("获取焦点");
      })

主动触发

oUserName.focus();

聚焦事件 onfocus 除了鼠标能触发 tab键也能

oUserName.onfocus =function(){
        console.log(3333);
    }
  1. 失去焦点 多用于保存文档 失去焦点就发送给后台 防止意外事件比如断电 必须先获得才能失去
//失去焦点
  oUserName.addEventListener("blur",function () {
      console.log("获取焦点");
  })

主动触发

oUserName.blur();

当输入个数大于10 失去焦点不能再点击输入 点确定就不能更改

 oUserName.addEventListener("focus",function () {
          console.log("获取焦点");
          if (this.value.length>=10){
              this.blur();//主动失去焦点
          }
      });

在获取焦点之后三秒之后主动失去焦点

oUserName.addEventListener("blur",function () {
      console.log("获取焦点");
      setTimeout(function () {
          oUserName.blur()
      },3000)
  });

失焦事件 onblur

3.监听内容改变(要有光标对象) 内容改变并且失去焦点触发 必须同时满足 执行顺序是先onchange然后onblur

oUserName.addEventListener("change",function () {
      oUserName.addEventListener("change",function () {
      if (parseInt(this.value)) {
          this.value=parseInt(this.value);
      }else{
          this.value=0;
          alert("请输入数字");
      }
  })
  })

改变事件 onchange

内容改变就会触发(能获得焦点光标) 没有任何前提 oninput 不兼容IE 可以监听键盘

oUserName.oninput =function(){
        if (this.value.length>=4){
            alert("不能再输入了");
        };
  1. 提交的两种方式
  • 表单上按回车键
  • button 的类型为submit
<button type="submit">注册</button>
oForm.addEventListener("submit",function () {
        console.log(111)
    });

点击提交之后其实打印了 但是控制台上没有 是因为刷新页面了

oForm.addEventListener("submit",function (e) {
        e.preventDefault();
        console.log(111)
    });

这样就不会刷新页面

主动触发点击事件

 oBtns = oBtnBox.querySelectorAll('button');
oBtns[0].addEventListener("click",function () {
        oForm.submit();
    })
  1. 监听重置事件 默认重置刷新页面
oForm.addEventListener("reset",function (e) {
    console.log("重置表单");
})

取消默认刷新 提交之后可以打印 并且重置刷新页面

oForm.addEventListener("submit",function (e) {
        e.preventDefault();
        console.log("提交了");
       this.reset();//主动重置
    });

键盘事件 有焦点之后才能触发

文档是例外

document.addEventListener("keydown",function () {
      console.log("文档")
  })

按键盘会触发

  1. 键盘按下 keydown 按下不放会一直触发
 oDes.addEventListener("keydown",function () {
            console.log("键盘按下");
        })
  1. 键盘松开 keyup 按下触发一次
oUserName.addEventListener("keyup",function () {
      if (this.value.length>5){
          alert("no");
      }
  })
  1. 键盘对应的数字
document.addEventListener("keydown",function (e) {
      console.log(e.keyCode);
  })

两个键同时按则有先后顺序打印

  1. 键盘输入 只有当按下键盘并有内容输入
oDes.addEventListener("keypress",function (e) {
    console.log("键盘输入");
})

按上下左右不会触发 空格会当作内容会触发 打中文也不会触发

键盘上有三个特殊键 ctrl shift alt

event.ctrlKey 
		true 真表示按下
		false 假表示没被按下
event.altKey 
evenftKey 

键盘按下怎样只打印一次?

document.stateKeyCode = [];
document.addEventListener("keydown",function (e) {
    if (document.stateKeyCode[e.keyCode] ==true){
        return false;
    }
    console.log(e.keyCode);
    document.stateKeyCode[e.keyCode]=true;
});
  document.addEventListener("keyup",function (e) {
      document.stateKeyCode[e.keyCode]=false;

  })

多个键位判断 方位判断

document.addEventListener("keydown",function (e) {
        switch (e.keyCode){
            case 38://
                console.log("");
                break;
            case 40://xia
                break;
            case 37://zuo
                break;
            case 39://you
                break;
            default:
                console.log("qita");
                break
        }
    });

猜你喜欢

转载自blog.csdn.net/lxhby520/article/details/80909941