zoukankan      html  css  js  c++  java
  • jquery事件

    事件

    HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件、页面的滚动事件onscroll等等,

    可以向文档或者文档中的元素添加事件侦听器来预订事件。想要知道这些事件是在什么时候进行调用的,就需要了解一下“事件流”的概念。

    什么是事件流

    事件流描述的是从页面中接收事件的顺序

    DOM事件流

    “DOM2级事件”规定的事件流包括三个阶段:

    ① 事件捕获阶段;

    ② 处于目标阶段;

    ③ 事件冒泡阶段

    1、addEventListener

    addEventListener 是DOM2 级事件新增的指定事件处理程序的操作,这个方法接收3个参数:要处理的事件名、作为事件处理程序的函数和一个布尔值。最后这个布尔值参数如果是true,表示在捕获阶段调用事件处理程序;如果是false,表示在冒泡阶段调用事件处理程序。

    2、document、documentElement和document.body三者之间的关系:

    document代表的是整个html页面;

    document.documentElement代表的是<html>标签;

    document.body代表的是<body>标签;

    事件冒泡

    什么是事件冒泡
    在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个事件会向这个对象的父级对象传播,从里到外,直至它被处理(父级对象所有同类事件都将被激活),或者它到达了对象层次的最顶层,即document对象(有些浏览器是window)。
    事件冒泡的作用
    事件冒泡允许多个操作被集中处理(把事件处理器添加到一个父级元素上,避免把事件处理器添加到多个子级元素上),它还可以让你在对象层的不同级别捕获事件。
    阻止事件冒泡
    事件冒泡机制有时候是不需要的,需要阻止掉,通过 event.stopPropagation() 来阻止

    阻止默认行为

    //阻止表单提交
    $('#form1').submit(function(event){
        event.preventDefault();
    })

    合并阻止操作

    //实际开发中,一般把阻止冒泡和阻止默认行为合并起来写,合并写法可以用
    // event.stopPropagation();
    // event.preventDefault();
    
    // 合并写法:
    return false;

    demo

    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            .father{
                 300px;
                height: 300px;
                background-color: red;
            }
    
        </style>
    </head>
    <body>
        <div class="father">
            <button>按钮</button>
            <a href="http://www.baidu.com">百度一下</a>
        </div>
        <script type="text/javascript" src="js/jquery-3.3.1.js"></script>
        <script type="text/javascript">
            
            $(function(){
    
                // 给按钮绑定事件
                // 在所有的事件回调函数中 都会有默认的事件对象
                $('.father button').click(function(event){
                    // 原生js的事件对象
                    console.log(event);
                    alert($(this).text());
                    // 阻止事件冒泡
                    //event.stopPropagation();
    
                });
    
                $('a').click(function(e){
                    // e.preventDefault();
                    // e.stopPropagation();
    
    
                    alert('a被点击了');
                    //return false;
                });
    
                $('.father').click(function(event){
                    alert('父亲被点击了');
                    // event.stopPropagation();
                    console.log('哈哈哈哈哈');
    
                    // 既阻止了默认事件 又阻止了冒泡
                    //return false;
                });
    
                $('body').click(function(){
                    alert('body被点击了');
                })
            });
        </script>
        
    </body>
    </html>

    事件委托

    定义:

    事件委托就是利用冒泡的原理,把事件加到父级上,通过判断事件来源的子集,执行相应的操作。

    作用:

    事件委托首先可以极大减少事件绑定次数,提高性能;

    其次可以让新加入的子元素也可以拥有相同的操作。

     1、一般绑定事件的写法:

    2、事件委托的写法:(实际开发中,如果是对大量子元素进行操作时,应该用事件委托的方式,提高性能)

    demo

    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
        </head>
    <body>
        <ul>
            <li>xx</li>
            <li class="item">yy</li>
            
        </ul>
        <button>添加</button>
        <script type="text/javascript" src="js/jquery-3.3.1.js" ></script>
            <script type="text/javascript">
            
            $(function(){
                /*
                $('ul>li').click(function(){
                    alert($(this).text());
                });
                */
    
                // 事件委托  (看时机  如果是未来追加的元素 建议使用 事件委托来绑定事件)
                // 原理: 利用冒泡的原理,把事件加到父级上,触发执行效果。
                //如果接收到了click事件触发通知,并且这个click事件是由我们这些li元素其中之一触发的,
                //就执行祖辈元素上委托绑定的事件处理函数。。
                $('ul').on('click','li',function(e){
                    //on()支持直接在目标元素上绑定事件,也支持在目标元素的祖辈元素上委托绑定。在事件委托绑定模式下,
                //即使是执行on()函数之后新添加的元素,只要它符合条件,绑定的事件处理函数也对其有效
                    alert($(this).text());
                });
    
                // 未来 动态的 往ul中追加了li标签
                // 未来追加的li标签 自己完成不了click事件,那么这个时候考虑“事件委托(代理)”
                $('button').click(function(event) {
                    $('ul').append('<li>zz</li>')
                });
            });
    
        </script>
        </body>
    </html>
  • 相关阅读:
    浅拷贝与深拷贝的实现
    Java批量下载生成zip文件
    jsp页面内容导出到Excel中
    Table动态增加删除行
    JavaScript校验日期格式
    java实现算术表达式求值
    XCode 4 编译错误大全整理
    VMWare安装黑苹果Mac OS
    ODA(Open Design Alliance)介绍
    AutoCAD 2010 开发与之前版本的区别
  • 原文地址:https://www.cnblogs.com/xiao-apple36/p/10142114.html
Copyright © 2011-2022 走看看