2019-05-05 JQuery事件使用方法:

jquery事件使用方法总结

jquery提供了许多的事件处理函数,下面对其总结一下,梳理一下知识点,便于记忆和使用。


一、鼠标事件

1. click():鼠标单击事件

$div = $("div")
$div.click(data,function (event) { //点击盒子变蓝
    $(this).css({
        "background": "blue",
    }); 
    console.log(event);
})
  • 参数function:匿名函数有且只有一个默认的参数event,event输出事件相关的信息;不允许有其他的参数,可以不写
  • 参数data:有时候需要传递额外的数据给函数,data可以是一个数组,不需要可以省略

扩展:

//event参数可以获取事件的各种属性,有几个常用

event.target:  获取触发事件的元素

$div.click(function (event) {
            $(event.target).css({
                    "background": "blue",
                });
    })

event.data: 获取事件传入的参数数据。
event.pageX: 获取鼠标光标点击距离文档左边left的距离;
event.pageY: 获取鼠标光标点击距离文档上边top的距离;

event.offsetX: 获取鼠标光标点击距离元素左边left的距离;
event.offssetY: 获取鼠标光标点击距离元素上边top的距离;

event.screenX: 获取鼠标光标点击距离屏幕left的距离;
event.screenY: 获取鼠标光标点击距离屏幕top的距离;

2. dblclick():鼠标双击事件

$div = $("div")
$div.dblclick()(function (event) { //双击盒子变蓝
    $(this).css({
        "background": "blue",
    });               
})
  • 参数和click的用法完全一样,event同样可以获取众多的属性。

3. 鼠标进入和离开(进入子元素也触发)

  • mouseover():进入
  • mouseout():离开
$div = $("div")
$div.mouseover(function (event) { 
    $(this).css({
        "background": "blue",
    });               
})
$div.mouseout(function (event) { 
    $(this).css({
        "background": "blue",
    });               
})
  • 参数同上,绑定后鼠标进入元素的子元素会再次触发。

4. 鼠标进入和离开(进入子元素不触发)

  • mouseenter() 鼠标进入
  • mouseleave() 鼠标离开
$div = $("div")
$div.mouseenter(function (event) { 
    $(this).css({
        "background": "blue",
    });               
})
$div.mouseleave(function (event) { 
    $(this).css({
        "background": "blue",
    });               
})
  • 参数同上,绑定后鼠标进入和离开子元素不会再次触发。

5. hover():同时为mouseenter和mouseleave事件指定处理函数

$div = $("div")
// 鼠标进入和移出事件
    $div.hover(function (event) {
        $div.css({
            "background": "blue",
        })

    },function (event) {
        $div.css({
            "background": "red", 
        });
    })
  • hover可以同时加入两个function,第一个是鼠标进入触发,第二个是移出触发。
  • 前面不可以添加data参数,否则报错。

6. 鼠标按下和松开

  • mouseup() 松开鼠标
  • mousedown() 按下鼠标
$div = $("div")
$div.mousedown(function (event) {
    $(this).css({
        "background": "blue",
    });
    console.log(event);
})

$div.mouseup(function (event) {
    $(this).css({
        "background": "blue",
    });
    console.log(event);
})
  • 参数同click,和点击事件click不同的是,click在鼠标点击(包括按下和松开)后才触发事件,这里是按下或松开就会触发。

7. mousemove() 鼠标在元素内部移动

  • 同法和参数同上。

二、键盘事件

*keypress():按下键盘(指的是按下)

 $(window).keypress([20],function (event) {
        $div.css({
            "background": "blue",
        });
    console.log(event.which);            
    })
  • 参数:同鼠标事件,第一个参数传递数据,function默认参数event值按下键盘事件。
  • 键盘事件需要绑定可获得焦点的元素,如:input,body,html,一般绑定窗口:window。
  • 如果需要具体判断按下了那个按键,使用event.which,返回键盘字母的ascii码。

注意:如果按下不放开,事件会连续触发。

*按下和松开

  • keydown() 按下键盘
  • keyup() 松开键盘
$(window).keydown([20],function (event) {
    $div.css({
        "background": "blue",
    });
    console.log(event);
})

$(window).keyup([20],function (event) {
    $div.css({
        "background": "blue",
    });
    console.log(event);
})

  • 参数同上。
  • keydown和keypress方法区别在于,keypress事件不会触发所有的按键,比如 ALT、CTRL、SHIFT、ESC等。

三、焦点事件

* 元素获取和失去焦点

  • blur() 元素失去焦点
  • focus() 元素获得焦点
$put = $("input");
$put.focus():元素自动获取焦点

$put.focus(function (event) {
    console.log(event);
        $div.css({
        "background": "blue",
            })
})//获取焦点后触发事件

$put.blur(function (event) {
    console.log(event);
        $div.css({
        "background": "blue",
            })
})//失去焦点后触发事件

  • 参数同click;
  • 焦点事件一般使用在input标签上,其他的标签一般得不到焦点。

四、表单事件

* submit(): 用户递交表单

$(".form").submit(function (event) {
    alert("提交事件");
    console.log(event);
    //阻止系统默认事件
    event.defaultPrevented();
    return false;
})
  • submit事件绑定在form表单上,点击提交按钮时触发该事件,可以对系统默认的提交进行拦截。
  • event.defaultPrevented();//阻止系统提交数据

五、其他事件

* ready():DOM加载完成后执行

  • 这个事件用来防止js报错,每次引入js都要使用,不在赘述。

* resize():浏览器窗口的大小发生改变触发事件

$(window).resize(function () {
    console.log($(window).width());
   })

  • 参数同click,这个事件需要绑定在window上才会生效,用于监控窗口的变化。

* scroll():滚动条的位置发生变化

* change(): 表单元素的值发生变化

$put.change(function () {
    $div.css({
        "background": "blue",
    });

})
  • 当表单元素如单选框、多选框、文本框等值发生变化时触发。

* unload() :用户离开页面

$(document).unload(function () {
    $div.css({
        "background": "blue",
    });
    console.log("likai");
})

六、通用的绑定事件和解绑方法

* bind():绑定

$(function(){
    $('div').bind('mouseover click', function(event) {
        alert($(this).html());
    });
});

  • 参数:第一个参数为需要绑定的事件的名字,可以绑定多个事件,之间用空格隔开;第二个参数是处理函数。

* unbind():解绑

$(function(){
    $('#div1').bind('mouseover click', function(event) {
        // $(this).unbind();解绑所有事件
        $(this).unbind('mouseover');解绑指定事件
    });
});
  • 参数同bind。

* on():绑定和委托都可用的方法

$("div").on(event,childSelector,data,function);
//四个参数

$(function(){
    $('div').on('mouseover click', function(event) {
        $(this).css({
        "background": "blue",
        });
    });
});
  • 参数
  • event,需要绑定的事件,多个事件用空格隔开;
  • function:事件的处理方法。
  • childSelector:选择需要委托的元素,用于委托事件。
  • data:额外的传参。

* off():解绑

$(function(){
    $('#div1').on('mouseover click', function(event) {
        // $(this).off();解绑所有事件
        $(this).off('mouseover');解绑指定事件
    });
});

* one():绑定一次自动解绑

如果需要触发事件一次后就自动失效,比如:按钮点击一次后 就失效使用这个方法。

$(function(){
    $('div').one('mouseover click', function(event) {
        $(this).css({
        "background": "blue",
        });
    });
});
  • 注意:当一次性绑定多个事件时,多个事件相互是独立的,即如果有一个事件被触发,那么这个事件解绑,对另外没有被触发的事件没有影响。

七、自定义和主动触发事件

说明:对于系统没有提供的事件,可以自己定义并主动触发。

$div.bind("abc",function () {
    $(this).css({
        "background": "blue",
    });

})
$div.trigger("abc");

  • trigger():触发事件的方法;这种方式类似协程。

八、事件的两大特征运用:

1. 事件的冒泡:

  • 定义:一个元素标签如div,在上面触发某种事件,如单击;如果div上没有定义单击事件或者定义了单击事件,但返回值不是false,即没有阻止冒泡;那么事件会向父级传递,每一个定义了单击事件的父级都会被触发事件,直到到达document或window。
注意:冒泡是事件的固有属性(自定义不适用),适合所有的系统事件。
  • 作用: 允许多个事件被击中到父级处理,减少绑定次数,提高性能。
$(function(){
    var $box1 = $('.father');
    var $box2 = $('.son');
    var $box3 = $('.grandson');
    $box1.click(function() {
        alert('father');
    });
    $box2.click(function() {
        alert('son');
    });
    $box3.click(function(event) {
        alert('grandson');
       // event.stopPropagation();阻止冒泡

    });
    $(document).click(function(event) {
        alert('grandfather');
    });
})

......

<div class="father">
    <div class="son">
        <div class="grandson"></div>
    </div>
</div>
  • 说明:上面代码界面,单击“grandson”的div,所有事件都会被触发;
  • 如果要阻止事件冒泡,使用stopPropagation()

扩展:合并阻止操作

event.stopPropagation();//阻止冒泡
event.preventDefault();//阻止默认行为

// 合并写法:
return false;
  • 实际开发中,一般把阻止冒泡和阻止默认行为合并起来写。

2. 事件委托

  • 定义:

  • 利用冒泡原理,将要处理相同事件的子元素的事件委托给父级,从而极大减少事件绑定的次数,提高性能。

  • 委托事件

  1. delegate():
$(function(){
    $list = $('list');
    $list.delegate('li', 'click', function(event) {
        $(this).css({background:'red'});
    });
})//给列表下面的每个li元素的事件委托给list列表。
  • 参数:第一个参数是需要委托的元素,采用css选择器的写法,默认从一级子元素开始;第二个参数时要委托的事件,可以是多个,之间用空格隔开,第三个参数是处理函数。

  • event指触发事件的那个对象。

  1. on():
$(function(){
    $list = $('list');
    $list.on('click', 'li', function(event) {
        $(this).css({background:'red'});
    });
})//给列表下面的每个li元素的事件委托给list列表。
  • 参数:
    • 第一个是需要委托的事件,多个用空格隔开;
    • 第二个是需要委托事件的子元素;
    • 第三个是触发处理函数。
  1. one():委托触发一次自动取消委托
$(function(){
    $('div').one('click',"li" function(event) {
        $(this).css({
        "background": "blue",
        });
    });
});

  • 说明:参数用法和on事件一样。

  • 取消委托

  1. undelegate():
$list.undelegate();//选择器找到委托对象取消委托
  • 使用undelegate()方法取消委托,所有的子元素的委托都将被取消。
  1. off():
$list.off("click","li");
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352

推荐阅读更多精彩内容

  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,483评论 1 11
  • 总结: 鼠标事件 1.click与dbclick事件$ele.click()$ele.click(handler(...
    阿r阿r阅读 1,603评论 2 10
  • 本篇博客源地址 总结: 鼠标事件 1.click与dbclick事件ele.click()ele.click(ha...
    ZombieBrandg阅读 672评论 0 1
  • (续jQuery基础(1)) 第5章 DOM节点的复制与替换 (1)DOM拷贝clone() 克隆节点是DOM的常...
    凛0_0阅读 1,332评论 0 8
  • 第1章 鼠标事件 1-1 jQuery鼠标事件之click与dbclick事件 用交互操作中,最简单直接的操作就是...
    mo默22阅读 1,268评论 0 6