jQuery 自学笔记(六)——— on统一注册事件、事件解绑、事件触发、事件对象、链式编程、显示与隐式迭代


一、on 统一所有的注册事件

jQuery1.7之后,jQuery用on统一了所有事件的注册方式。

1.1 on 简单注册

不支持动态注册

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        div {
            width: 200px;
            height: 200px;
            margin-top: 10px;
        }
        .one  {
            border: 1px solid red;
        }
        .two {
            border: 1px solid green;
        }
    </style>
</head>
<body>
<input type="button" value="按钮" id="btn"/> <br/><br/>
<div class="one" id="one"></div>
</body>
</html>
<script src="jquery-3.4.1.min.js"></script>
<script>
    $(function () {
        $('#btn').click(function () {
            let $divNew = $('<div class="two"></div>');
            $('body').append($divNew);
        });
        //on简单注册事件.
        $('div').on('click', function () {
			alert("我是单击事件...");
        });
    })
</script>

效果如下:
在这里插入图片描述
效果显示,用 on 进行简单的事件注册,原给 div 的注册点击事件,在新创建的 div 中该事件不起作用,即不支持动态注册。

on 的简单注册,可实现同时注册,代码如下:

$('#one').on({
	'click':function () {
		console.log('单击事件');
	},
	'mouseenter':function () {
		console.log('鼠标移入事件');
	}
})

效果如下:
在这里插入图片描述


1.2 on 委托注册

支持动态注册
语法: $(父元素选择器).on(事件名称, 选择器, 函数)

  • 第一个参数:事件名称,绑定事件的名称可以是由 空格分开的多个事件(标准事件或者自定义事件)
  • 第二个参数:选择器,执行事件的后代元素(可选),如果没有后代元素,那么事件将有自己执行。
  • (忽略)第三个参数: data,传递给处理函数的数据,事件触发的时候通过event.data来使用,不常使用。
  • 第四个参数:事件处理函数

示例 1:

$('body').on('click','div', function () {
	alert("单击事件.");
});

效果如下:
在这里插入图片描述
从效果可以看出,通过 on 委托注册,可以动态注册。
委托事件的原理:点击选择器会触发所有父元素的点击事件,即“委托”父元素注册事件。

示例 2:

$('body').on('click','div,span', function () {
	alert("单击事件.");
});

效果如下:
在这里插入图片描述

示例 3:同时注册

$('body').on('click mouseenter','div', function () {
	console.log("事件");
});

效果如下:
在这里插入图片描述


二、事件解绑

jQuery 用 on 来注册事件,用 off 来解绑事件。

  1. off() 不给参数就是解绑所有的事件

  2. off(‘click’) 解绑指定的事件

    $('#btn2').on('click',function () {
    	$('#one').off(); //解绑所有的事件
    	$('#one').off('click'); //解绑单机事件
    })
    

三、触发事件 trigger

  1. 代码的方式来触发

    // div 注册一个单击事件
    $('#one').on('click',function () {
    	console.log('单击事件');
    })
    
    //给按钮注册事件
    var i = 0;
    $('#btn1').on('click',function () {
    	i++;
    	if(i==3){
    		//条件满足,触发div的单击事件
    		//事件触发,感觉使用代码的方式来触发事件
    		// $('#one').click(); //第一种方式
    		$('#one').trigger('click'); //第二种方式
    	}
    });
    
  2. 可以触发自定义事件

    //给 div 注册一个自定义事件
    $('#one').on('zidingyi',function() {
    	console.log('我是自定义事件');
    })
    
    //定义触发事件
    $('#btn2').on('click',function () {
    	var res = confirm('调用自定义事件么?');
    	if(res){
    		//触发自定义事件
    		$('#one').trigger('zidingyi');
    	}
    })
    

四、事件对象

  1. 什么是事件对象
    注册一个事件,系统就会帮我们生成一个对象记录这个事件触发时候的一些信息,比如:触发事件的时候有没有按住某个键,再比如触发这个事件的时候的一些坐标信息等。
    jQuery中用事件参数e来获取
    jQuery的事件对象是对原生 js 事件对象的一个封装,已经处理好了兼容性。
    $("#one").on('click', function (e) {console.log(e);});

  2. 事件对象有常用的三个坐标
    (screenX, screenY)、(clientX, clientY)、(pageX, pageY)

    console.log("screenX: "+e.screenX+":"+e.screenY);//触发事件那一点距离屏幕最左上角的值
    console.log("clientX: "+e.clientX+":"+e.clientY);//触发事件那一点距离可视区左上角的值
    console.log("pageX: "+e.pageX+":"+e.pageY);//触发事件那一点距离页面左上角的值
    
  3. 阻止事件冒泡
    事件冒泡的意思是,当初发当前元素的事件时,会连带着触发父元素(父辈的元素)的单击事件。如:

    ...
    <body>
      <div id="one" class="one">
        <input type="button" value="我是按钮" id="btn"/>
      </div>
    </body>
    <script>
      $(function () {
        $("#one").on('click', function (e) {
          alert('我是div的单击事件');
        })
        //给按钮注册一个单击事件a
        $('#btn').on('click',function (e) {
          alert('我是按钮的单击事件');
        })
      });
    </script>
    

    效果图如下:
    在这里插入图片描述

    结果显示,当触发按钮的单击事件时,按钮的父元素 div 的单击事件也会触发。当按钮的单击事件的函数加上 e.stopPropagation();,则会阻止事件冒泡。代码如下:

    $('#btn').on('click',function (e) {
    	alert('我是按钮的单击事件');
    	e.stopPropagation();//阻止事件冒泡
    })
    

    在这里插入图片描述

  4. 阻止默认行为
    a 超链接标签的跳转是默认行为,通过事件对象可阻止默认行为。

    $('a').on('click',function (e) {
      alert('我是a标签的单击事件');
      //第一种方式
      e.stopPropagation();//阻止事件冒泡
      e.preventDefault();//阻止默认行为-阻止a标签的跳转
      //第二种方式
      //return false;//即能阻止事件冒泡又能阻止默认行为
    })
    

    在这里插入图片描述

  5. 给页面注册键盘按下事件

    $(document).on('keydown',function (e) {
    	//e.keyCode能获取按的那个键
    	console.log(e.keyCode);//返回 ascall 值
    })
    

五、链式编程

  1. 什么时候可以链式编程?
    如果给元素调用一个方法,这个方法有返回值,并且返回的是一个 jQuery 对象,那就可以继续再点出 jQuery 方法,如:
    $('div').width(100).height(100).css('backgroundColor','red');

  2. 必须是 jQuery 对象才能点出 jQuery 方法
    console.log($('div').width(100).width()); //100
    $('div').width(100).width().height(100); //报错了,因为数值不能点出jQuery方法

  3. end()    返回上一状态(选择器)
    $('#one').width(200).children().end().height(200) 等同于 $('#one').width(200).height(200)
    注意:end() 方法也是 jQuery 方法,其也需要一个 jQuery 对象才能点出。如:
    // width() 方法返回的是一个数值,数值不能点出end()方法。
    $('div').width(100).width().end().height(100); //报错


六、显示迭代与隐式迭代

给每一个对象设置 不同的值的时候(或不同处理) 使用显示迭代。
作用:遍历 jQuery 对象集合,为每个匹配的元素执行不同函数。

$(选择器).each(function(索引,当前元素))

注意:返回 false 可用于及早停止循环。

$('#list').each(function (index,element) {
	console.log(index); //每一个li标签的索引
	console.log(element);//每一个li标签,是一个dom对象.
});

给每一个对象设置 相同的值的时候(或相同处理) 使用隐式迭代。
如:$('li').css('border', '1px solid red')

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xiu Yan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值