JavaScript教程:焦点事件

说明

一般用于文本输入框,当控件 获取焦点、失去焦点 时,触发事件,执行函数

事件类型

传统写法:

  • blur:失去焦点事件
  • focus:获取焦点事件

新写法

提示:需要搭配 addEventListener() 写法绑定事件,否则可能会不可用

  • focusout:失去焦点事件
  • focusin:获取焦点事件

例子

传统写法

用户名:<input type="text" id="username">
<div id="msg"></div>
<script>
    document.getElementById("username").onfocus = function(){
        console.log("获取焦点")
        // 在 msg div上显示:6-18个字符

        // 获取 id 是 msg的dom对象(html中的标签)
        var divObj = document.getElementById("msg")
        // 设置标签中的文字
        divObj.innerHTML = "6-18个字符"
    }
    document.getElementById("username").onblur = function(){
        console.log("失去焦点")
        // 获取 id 是 msg的dom对象(html中的标签)
        var divObj = document.getElementById("msg")
        // 设置标签中的文字是空字符串,作用是清空
        divObj.innerHTML = ""
    }
</script>

新写法

用户名:<input type="text" id="username">
<div id="msg"></div>
<script>
    document.getElementById("username").addEventListener("focusin",function(){
        console.log("获取焦点")
    })
    document.getElementById("username").addEventListener("focusout",function(){
        console.log("失去焦点")
    })
</script>

案例1

获取焦点时,清空警告,类似 网易邮箱登录

html:

姓名:<input type="text" id="username"> <span id="username_warn" class="warn"></span><br>
<input type="button" id="sbt" value="提交">

css:

<style>
    .warn{
        color: red;
    }
</style>

JavaScript:

// 给按钮绑定事件
document.getElementById("sbt").addEventListener("click",function(){
    let username = document.getElementById("username").value
    if(username === ""){
        document.getElementById("username_warn").innerText = "请输入用户名!"
    }

    console.log("模拟提交代码。。。。")
})

// 给 姓名控件增加获取焦点事件,清空警告
document.getElementById("username").addEventListener("focusin",function () {
    console.log(1111)
    document.getElementById("username_warn").innerText = ""
})

案例2

失去焦点,校验手机号格式

html:

手机号:<input type="text" id="phone" > <span id="phone_warn" class="warn"></span><br>
<input type="button" id="sbt" value="提交">

css:

<style>
    .warn{
        color: red;
    }
</style>

JavaScript:

// 当手机号控件失去焦点时,就做校验
document.getElementById("phone").addEventListener("focusout",function () {
    let phone = this.value
    let res = /^1[345678]\d{9}$/.test(phone)
    console.log("res:",res)
    if(!res){
        document.getElementById("phone_warn").innerText = "请正确输入手机号!"
    }else{
        document.getElementById("phone_warn").innerText = ""
    }
})

原文出处:/show_1IX3B5EbsYMS.html