11.jQuery—事件和筛选器方法

一、事件

1、事件和事件流

HTML和js的交互是通过事件驱动来实现的,事件流描述的就是页面接受事件的顺序,“DOM2级事件”规定的事件流包括三个阶段:(1)事件捕获阶段;(2)处于目标阶段;(3)事件冒泡阶段。

2、绑定事件的两种方式:

<script src="jquery-3.1.1.js"></script>
    <script>
        //方式一
        $(‘#d1‘).click(function(){
            $(this).css({‘background-color‘:‘green‘});
        })
        //方式二
        $(‘#d1‘).on(‘click‘, function(){
            $(this).css({‘background-color‘:‘green‘});
        })
    </script>

3、常用事件:

  • click(function(){}) 鼠标单击触发
  • dbclick(function(){}) 鼠标双击触发
  • hover(function(){})
  • focus(function(){}) 鼠标聚焦触发事件
  • blur(function(){}) 鼠标失焦触发
  • change(function(){}) 内容发生变化,input等
  • keydown(function(){}) 键盘按下触发
  • keyup(function(){}) 键盘弹起触发
  • mouseover(function(){}) 鼠标移动触发
  • mouseenter(fucntion(){}) 鼠标进入触发

mouseover和mouseenter的区别是:mouseover事件是如果该标签有子标签,那么移动到该标签或者子标签时会连续触发,mouseenter事件不敢管有没有子标签只触发一次,表示鼠标进入这个标签。

mouseover示例:

11.jQuery—事件和筛选器方法

4、键盘按下和抬起

keydown和keyup事件(键盘按下和抬起事件,还有一些其他的key事件),如:按下shift实现批量操作。

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>keydown和keyup</title>
    <style>
        .c1{
            height: 100px;
            width: 100px;
            background-color:rgb(173, 111, 30);
        }
    </style>
</head>
<body>
    <from name="" id="">
    keydown<input type="text" id="k1" value="0"><br>
    keyup<input type="text" id="k2">
    </from>
    <div id="" class="c1"></div>

<script src="jquery-3.1.1.js"></script>
<script>
    var num = 0;
    //window对象下的,e\event时当前事件对象
    $(window).keydown(function(e){
        console.log(e.keyCode)
        num++;
        //$("#k1").val(num)
        //e.keyCode    是每个按键对应的keyCode值,通过不同的值触发不同的事件
        if(e.keyCode === 37){
            $(‘.c1‘).css({‘background-color‘:‘red‘});

        }else if(e.keyCode === 39){
            $(‘.c1‘).css({‘background-color‘:‘green‘})
        }
    });
    $(window).keyup(function(e){
        $(‘#k2‘).val(e.keyCode)
    })
</script>
</body>

二、事件冒泡

在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个事件会向这个对象的父级对象传播,从里到外,直至它被处理(父级对象所有同类事件都将被激活),或者它到达了对象层次的最顶层,即document对象(有些浏览器是window)。即一个子标签的事件可能会触发父级标签的事件处理函数。

1、阻止事件冒泡

  1. 阻止事件冒泡:e.stopPropagation()方法
  2. 阻止默认行为:e.prevenDefault()方法
  3. return false 在jQuery中可以阻止事件冒泡和默认事件:jQuery不支持事件捕获
$(‘a‘).click(function (ev) {
    //方法一:同时阻止默认事件和冒泡事件
    ev.preventDefault();    // 阻止默认事件
    ev.stopPropagation();   // 再阻止冒泡事件
    alert(‘不再跳转页面‘);
 
    // 方法二:
    return false;  // 这个可以阻止a标签的默认事件和冒泡事件
})
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>事件冒泡</title>
    <style>
        #d1{
            background-color: red;
            height: 100px;

        }
        #d2{
            background-color: green;
            height: 100px;
            width: 100px;
        }
    </style>
</head>
<body>
    <div id="d1" class="" >
        <div id="d2" class=""></div>
    </div>
<script src="jquery-3.1.1.js"></script>
<script>
    $(‘#d1‘).click(function(){
        alert(‘父级标签‘);
    });
    $(‘#d2‘).click(function(e){
        alert(‘子级标签‘);
        //解决事件冒泡,这样点击子标签时,父标签的的alert不会弹出,阻止事件冒泡
        //return false;
        //e.stopPropagation();
        
    })
</script>
</body>

三、事件绑定和移除

1、当前dom添加事件的两种方法

// 方式一:给当前dom元素添加click事件
$(‘#box‘).click(fn);
 
// 方式二:给当前的dom元素绑定事件 bind()
// 语法:jquery对象.bind(‘事件类型‘,fn)
$(‘#box‘).bind(‘click mouseenter‘, function () {
    alert(‘事件被绑定了‘)
})

2、详细事件和函数绑定到元素——bind()绑定方法

语法:$(select).bind(event, data,function)

参数:第一个参数是事件类型,常用click,blur,hover等;多个事件类型可以通过将每个空格分隔开来一次绑定。

可以通过传递事件类型/处理程序对的对象来同时绑定多个事件处理程序

第二个参数是可选参数,作为envet.data属性值传递给事件对象的额外数据对象

第三个参数是用来绑定的处理函数

function add() {
    console.log(‘click‘);
}
function add2() {
    console.log(‘mouse-over‘)
}
// 给jquery对象添加不同的事件
$(‘#box‘).bind({
    ‘click‘: add,
    ‘mouseenter‘:add2
})

3、移出事件——unbind()

语法:unbind(type,fn)

第一个参数:事件类型。如果不写参数,移除所有的事件:

// 如果没有参数表示移除所有事件
$(‘#box‘).unbind();

第二个参数:将要移除的函数

$( "#foo").unbind( "click" ,function(){})

4、事件委托

事件委托是通过事件冒泡的原理,利用父标签去捕获子标签的事件,将未来添加进来的某些子标签自动绑上事件。将字标签的事件统一给委托父标签。

 事件委托(代理)使用情景:

  (1)为DOM中的很多元素绑定相同事件:事件注册在祖先级元素上,代理其子级元素。可以减少事件注册数量,节约内存开销,提高性能。

  (2)为DOM中尚不存在的元素绑定事件:对js动态添加的子元素可自动绑定事件。

事件代理作用:

  (1)性能比较好;(2)针对新创建的元素,直接可以拥有事件。

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>事件委托</title>
</head>
<body>
    <div id=‘d1‘>
        <button class=‘b1‘>按钮</button>
    </div>
<script src="jquery-3.1.1.js"></script>
<script>
    //这里添加的按钮不会有绑定事件
    //  $(‘.b1‘).on(‘click‘ ,function(){
    //     alert(‘转圈圈‘);
    //     var btn = document.createElement(‘button‘);
    //     $(btn).text(‘按钮‘);
    //     $(btn).addClass(‘b1‘);
    //     console.log(btn);
    //     //添加到div标签里面
    //     $(‘#d1‘).append(btn);
    // })
    //将button点击事件委托给父辈<div id="d1">的标签,按钮有绑定事件
    $(‘#d1‘).on(‘click‘, ‘.b1‘ ,function(){
        alert(‘转圈圈‘);
        var btn = document.createElement(‘button‘);
        $(btn).text(‘按钮‘);
        $(btn).addClass(‘b1‘);
        console.log(btn);
        //添加到div标签里面
        $(‘#d1‘).append(btn);
    })
</script>
</body>

四、页面载入

等待整个页面中的内容加载完成,触发window.onload对应的函数里面的内容

window.onload缺点:有覆盖现象,会被后面的window.onload给重新复制

采用引入js的方式引入事件,会等待页面加载完成再触发,在页面中写,只会等待标签加载完成就触发对应事件,不会等待图片和视频加载完成

1. jquery文件要在使用jquery的代码之前引入

2. js代码最好都放到body标签下面或者里面的最下面来写

3.window.onload
	// window.onload = function () {
    //     $(‘.c1‘).click(function () {
    //         $(this).css({‘background-color‘:‘green‘});
    //     })
    // }
4.页面载入,$(function (){alert(‘xx‘);}) -- $(document).ready(function(){});
	页面载入与window.onload的区别
    1.window.onload()函数有覆盖现象,必须等待着图片资源加载完成之后才能调用
    2.jQuery的这个入口函数没有函数覆盖现象,文档加载完成之后就可以调用(建议使用此函数)
    
示例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="jquery.js"></script>
    <script>
        // 等待整个页面中的内容全部加载完成之后,触发window.onload对应的函数里面的内容
        // window.onload 有覆盖现象,会被后面的window.onload给重新赋值
        // window.onload = function () {
        //     $(‘.c1‘).click(function () {
        //         $(this).css({‘background-color‘:‘green‘});
        //     })
        // }

        $(function () {
            $(‘.c1‘).click(function () {
                $(this).css({‘background-color‘:‘green‘});
            })
        });

    </script>
    <script src="xx.js"></script>


    <style>
        .c1{
            background-color: red;
            height: 200px;
            width: 200px;
        }
    </style>
</head>
<body>
<div class="c1"></div>
<img src="" alt="">
</body>
</html>

五、表单事件

1、change():表单元素发生改变时触发事件

//change()事件————表单元素发生改变时触发事件
//此事件仅限于input元素、textarea框、select元素。
//对于选择框,复选框和单选按钮,当用户使用鼠标进行选择时,会立即触发事件。
$(‘select‘).change(function(){
    console.log($(‘select option:selected‘).text());
 
    $(‘.show‘).text($(‘select option:selected‘).text());
})

2、select():文本元素发生改变时触发事件

// select()事件————文本元素发生改变时触发事件
// 仅限于用在input type=text 或 textarea  表单元素
$(‘#other‘).select(function () {
    console.log($(this).val());
})

3、submit():表单元素发生改变时触发事件

// form表单和服务端有很大的挂钩:form表单有默认的submit行为,当对input type=submit按钮点击的时候会触发form的默认action行为,
// 此时可以调用 jquery的submit方法通过e.preventDefault()来阻止默认事件,这样我们就能动态的跟服务端来发送数据了
$(‘form‘).submit(function (ev) {
    // alert(1111);  // 触发submit事件弹出1111,再触发form表单的默认行为跳转到路飞官网
 
    // 阻止默认事件
    ev.preventDefault();
    alert(1111);  // 只会触发submit事件弹出1111
})

11.jQuery—事件和筛选器方法

上一篇:C# 数据库并发的解决方案(通用版、EF版)


下一篇:selenium页面操作之页面请求操作(访问网址、前进、后退刷新)、获取断言信息(获取url、浏览器标题、保存图片、获取网页源码)