ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

18 JavaScript DOM事件

2022-08-05 16:31:16  阅读:405  来源: 互联网

标签:function oDiv DOM 18 JavaScript 事件 var console document


JS是事件驱动为核心的一门语言

1 事件三要素

事件源、事件、事件驱动程序

  • 事件源:引发后续事件的html标签。
  • 事件:js已经定义好了(见下图)。
  • 事件驱动程序:对样式和html的操作。也就是DOM

代码书写步骤如下:(重要)

  • (1)获取事件源:document.getElementById(“box”);
  • (2)绑定事件: 事件源box.事件onclick = function(){ 事件驱动程序 };
  • (3)书写事件驱动程序:关于DOM的操作

常用事件

image


2 事件绑定方式

直接绑定匿名函数

 var oDiv = document.getElementById("box");
//绑定事件的第一种方式
oDiv.onclick = function () {
    alert("我是弹出的内容");
};

先单独定义函数,再绑定

var oDiv = document.getElementById("box");
//绑定事件的第二种方式
oDiv.onclick = fn;   //注意,这里是fn,不是fn()。fn()指的是返回值。
//单独定义函数
function fn() {
    alert("我是弹出的内容");
};

行内绑定

<!--行内绑定-->
<div id="box" onclick="fn()"></div>

<script type="text/javascript">

    function fn() {
        alert("我是弹出的内容");
    }

</script>

注意第一行代码,绑定时,是写的"fn()",不是写的"fn"。因为绑定的这段代码不是写在js代码里的,而是被识别成了字符串

3 onclick&ondblclick

光标点击事件

<div id="box"></div>
<script>
    //首先取到节点对象
    var oDiv = document.getElementById('box');
    //设置事件
    var isBlue = true;
    function add(){
        if (isBlue){
            //this 只向当前的元素节点对象
            this.style.backgroundColor = 'red';
            isBlue = false;
        }else {
            this.style.backgroundColor = 'blue';
            isBlue = true;
        }
    }
    oDiv.onclick = add; //光标单击事件
  	oDiv.ondblclick = add; //光标双击事件
</script>

4 onm ouse

onmouseover & onm ouseout/onmouseleave 鼠标划过和移开事件

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #box{
            width: 200px;
            height: 200px;
            background-color: red;
        }
    </style>
</head>
<body>
<div id="box"></div>
<script>
    //1.找到事件源
    var oDiv = document.getElementById('box');
    //2.事件(鼠标划过事件)
    oDiv.onmouseover = function () {
        //3.事件的驱动程序
        this.style.backgroundColor = 'green';
    }
    //2.事件(鼠标移开事件)
    oDiv.onmouseleave = function () {
        //3.事件的驱动程序
        this.style.backgroundColor = 'red';
    }
</script>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .content{width: 300px;}
        .content .text{height: 50px;background-color: greenyellow}
        .content .c1{height: 50px;background-color: orange}
        .content .c2{height: 50px;background-color: rebeccapurple}
        .content .c3{height: 50px;background-color: indianred}
        .hide{display: none}
    </style>
</head>
<body>
<div class="content">
    <div class="text">标题</div>
    <div class="list hide">
        <div class="c1">111</div>
        <div class="c2">222</div>
        <div class="c3">333</div>
    </div>
</div>
<script>
    var text = document.querySelector('.text');
    var list = document.querySelector('.list');
    var content = document.querySelector('.content');
    text.onmouseover = function () {
        list.classList.remove('hide');
    }
    content.onmouseleave = function () {
        list.classList.add('hide');
    }
</script>
</body>

5 onfocus&onblur

光标的聚焦和离焦

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .text{
            color: red;
        }
    </style>
</head>
<body>
<form>
    <p class="name">
        <label for="username">用户名:</label>
        <input type="text" name="user" id="username">
    </p>
    <p class="pwd">
        <label for="pwd">密码:</label>
        <input type="password" name="wpd" id="pwd">
    </p>
    <input type="submit" name="">
</form>
<script>
    var userName = document.getElementById('username');
    var newNode = document.createElement('span');
    //光标的聚焦
    userName.onfocus = function () {
        newNode.innerHTML = '请输入用户名'
        newNode.setAttribute('class','text')
        userName.parentNode.appendChild(newNode);
    }
    //光标的离焦
    userName.onblur = function () {
        newNode.innerHTML = '请输入正确的用户名'
        newNode.setAttribute('class','text')
        userName.parentNode.appendChild(newNode);
    }
</script>
</body>
</html>

6 onselect&oninput

内容选中和内容改变事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<textarea cols="30" rows="10">个人简介</textarea>
<input type="text" name="" value="lxx">
<script>
    var textArea = document.getElementsByTagName('textarea')[0];
    var inputObj = document.getElementsByTagName('input')[0];
    textArea.onselect = function () {
        console.log('内容被选中');
    }
    inputObj.onselect = function () {
        console.log('内容被改变');
    }
    inputObj.oninput = function () {
        console.log('内容被实时改变了');
        console.log(this.value); //获取改变的值
    }
</script>
</body>
</html>

7 onl oad

窗口加载事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        /*
        setTimeout(function () {
            var oDiv = document.getElementById('box');
            console.log(oDiv);
            oDiv.onclick = function () {
                this.innerHTML = 'alex';
            }
        },0)
        */
        //等待文档元素加载完后才会调用onload()
        window.onload = function () {
            var oDiv = document.getElementById('box');
            console.log(oDiv);
            oDiv.onclick = function () {
                this.innerHTML = 'alex';
            }
        }
    </script>
</head>
<body>
<div id="box">lxx</div>
</body>
</html>

8 获取标签文本信息

行内式静态

<div ondblclick="foo(this)">lxx</div>
<div id="box">wxx</div>
<script>
    /*
    //获取DOM标签对象的文本
    function foo() {
        var oD = document.getElementById('box');
        console.log(oD.innerHTML);
    }
    */
    
    //获取自己的标签的文本信息
    function foo(self) {
        console.log(self.innerHTML);
    }
</script>

动态(绑定自己时,要用this)

<div id="box">wxx</div>
<ul class="title">
    <li>111</li>
    <li>222</li>
    <li>333</li>
</ul>
<script>
    var ele = document.getElementById('box');
    ele.onclick = function () {
        console.log(this.innerHTML);
    }

    var uL = document.querySelectorAll('.title li');
    for (var i=0; i<uL.length; i++){
        uL[i].onclick = function () {
            //事件被点击后触发执行
            console.log(this.innerHTML);
        }
    }
</script>

9 onsubmit

提交事件

<body>
<form action="" id="i1">
    <input type="text" name="user" class="c1">
    <input type="submit">
</form>

<script>
    var ele = document.querySelector('#i1');
    var user = document.querySelector('.c1');
    ele.onsubmit = function (e) {
        if (user.value.length<=5){
            alert('用户名长度要大于等于5');
            user.value = '';
            //阻止默认提交事件:方式一
            return false;
            //阻止默认提交事件:方式二
            e.preventDefault();
        }
    }
</script>
</body>

10 onchange

当文本内容或选中的内容发生变化时,触发事件

<body>
<select name="" id="provice">
    <option value="">请选择省份</option>
    <option value="hubei">湖北省</option>
    <option value="hebei">河北省</option>
    <option value="guangdong">广东省</option>
</select>
<select name="" id="city">
    <option value="">请选择城市</option>
</select>

<script>
    var data = {'hubei':['襄阳','武汉','荆州'],
    'hebei':['保定','石家庄','廊坊'],
    'guangdong':['广州','深圳','东莞']};
    var provice = document.querySelector('#provice');
    var city = document.querySelector('#city');
    //当文本内容或选中的内容发生变化时,触发事件
    provice.onchange = function () {
        var cit = data[this.value];

        //清空方法
        city.options.length = 1;

        for (var index in cit){
            console.log(cit[index]);
            //创建标签
            var oP = document.createElement('option');
            oP.innerHTML = cit[index];
            city.appendChild(oP);
        }
    }
</script>
</body>

11 onkeys

输入键事件

<input type="text" class="c1">
<script>
    var ele = document.getElementsByClassName('c1')[0];
    //检测键盘摁下事件
    ele.onkeydown = function () {
        console.log('ok');
    }
    
    //检测键盘摁下后松开事件
    ele.onkeyup = function (e) {
        console.log(e.keyCode); //输出key的数字
        console.log(e.key); //输出key的相应字符
        if (e.keyCode === 13){
            console.log('enter');
        }
    }
</script>

12 冒泡事件

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c1{
            width: 300px;
            height: 300px;
            background-color: #83c44e;
        }
        .c2{
            width: 150px;
            height: 150px;
            background-color: indianred;
        }
    </style>
</head>
<body>
<div class="c1">
    <div class="c2"></div>
</div>
<script>
    var ele1 = document.querySelector('.c1');
    ele1.onclick = function () {
        alert('c1区');
    }
    var ele2 = document.querySelector('.c2');
    ele2.onclick = function (e) {
        alert('c2区');
        //阻止事件冒泡(只执行自己的代码,不在延续其它事件)
        e.stopPropagation();
    }
</script>
</body>

标签:function,oDiv,DOM,18,JavaScript,事件,var,console,document
来源: https://www.cnblogs.com/it-lkp/p/16554857.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有