jQuery事件

一、基础事件

1、绑定事件

bind();
参数一:要绑定事件函数的事件名。
参数二:要绑定的事件函数(事件函数名),如果将来有可能删除该绑定的函数,则必须传函数名。
bind()方法可以通过链式调用的形式连续多次调用,进而个同一标签的同一事件(不同事件)添加不同的事件函数。
on('事件名',fn);
one('事件名',fn);该方法绑定的事件函数只能被触发一次。

2、解除事件

unbind();
参数一:要解绑事件函数的事件名(如果只传这一个参数,则该事件名中绑定的函数全部解除)。
参数二:要解除绑定的事件函数名。
off();

注意:bind()和unbind()在3.0后已经被on()和off()取代。

$('button').bind('click',hello);
$('button').unbind('click',hello);
                
3.0后提倡的方法:on off
$('button').on('click',hello).on('click',bye);
解除事件绑定,解除很多方法都可以用这个方法
$('button').off('click');

one()方法绑定的事件函数只能被触发一次
$('button').one('click',hello);
 $('button').off('click');
3、简写事件

事件简写本质就是简化给标签添加事件函数的操作,标准的添加事件方法:on/bind/one,类似于js的DOM2级添加事件函数操作;事件简写类似于DOM0级的事件绑定操作。

jq事件简写绑定事件函数的技术实现原理:
1、jq给每一个事件名定义了同名的函数,用户调用的事件简写形式,就是在调用这个和事件名同名的函数
2、同名函数内部实现原理:当用户调用了该函数,首先获取该函数的函数名(函数名代表的是事件名),在函数内部通过on把通过参数传进来的函数绑定在函数名对应的事件上。

blur(fn):失去焦点时触发该方法。
focus(fn):当鼠标或tab按钮让元素获得焦点时,触发该函数。
change(fn):表单元素失去焦点(单选框、复选框、下拉菜单标签被选中即可触发,不需等待失去焦点),触发该事件。
click(fn):鼠标点击时触发该事件。
dbclick(fn):双击元素时触发该事件(注意:把click和dbclick用于同一个元素会产生问题)。
$(window).scroll(fn):当页面滚动时触发事件。

function hello(){
                    alert('hello');
                }
$('button').click(hello);
                $('button').click(function(){
                    alert('bye')
                });
                $('button').off('click');
4、复合事件

hover(fn1,fn2):鼠标移入触发fn1函数,鼠标移出触发fn2函数。

$('div').hover(function(){
                    $(this).css('background','red')
                },function(){
                    $(this).css('background','green')
                });

复合事件:toggle().在1.8之前中,复合了奇、偶次点击事件,在1.9之后的版本中toggle方法用于jq的动画
toggle()方法在1.8之前的版本中需要两个函数类型作为参数,奇数次点击触发第一个函数,偶数次店家触发第二个函数。

                $('#div').toggle(function(){
                    $(this).css('background','red')
                },function(){
                    $(this).css('background','green')
                });

二、事件对象

事件对象的获取:在事件触发的函数中传递event参数。

事件对象的常用属性:

event.type:事件类型
event.target:触发事件的元素
e.currentTarget:事件绑定在哪个元素上
event.pageX:鼠标相对于文档的左侧坐标
event.pageY:鼠标相对于文档的顶部坐标
e.preventDefault():取消标签事件,如a标签的页面跳转。
e.stopPropagation():阻止事件冒泡

$('#div').click(function(event) {
// 通过jq获取到的事件对象和js获取到的事件对象所具备的属性基本一致。
console.log(event);

// 在jq事件体系中target属性保存的是触发该事件的标签;currentTarget属性保存的是响应(触发了事件函数)的标签
console.log(event.target);
console.log(event.currentTarget);

// 在js事件体系中,target属性保存的是触发该事件的标签,currentTarget属性永远为null
 });
事件的冒泡以及默认行为的处理

1、阻止事件冒泡
stopPropagation()方法
2、阻止默认行为
preventDefault()方法
注意:1、return false 在jQuery中是即阻止事件冒泡又阻止默认行为
   2、jQuery不支持事件捕获

jQuery高级事件

window.onload = function () {
                /*
                var btnArr = document.querySelectorAll('.btn');

                for (var i = 0; i < btnArr.length; i ++) {
                    btnArr[i].num = i+1;
                    btnArr[i].onclick = function () {
                        alert('这是第' + this.num + '个按钮');
                    }
                }
                */

               /*
                var btnArr = document.querySelectorAll('.btn');

               for (var i = 0; i < btnArr.length; i++) {
                   // var count = i + 1
                   btnArr[i].id =  i+1;
               }

               // 使用Js事件委托实现功能
               var divTag = document.querySelector('#div');
               divTag.onclick = function (ev) {
                   var e = event || ev;
                //    console.log(e.target.id);
                alert('当前是第' + e.target.id + '个按钮')

               }

               */

            //   $('.btn').each(function(index, el) {
            //         this.id = index + 1;
            //   });

                // 通过jq实现事件委托
                /*
                $('#div').click(function(event) {
                    alert('当前触发的是第' + event.target.id + '个按钮')
                });
                */

        /*
                $('#div').on('click', function (event) {
                    // index()该方法是jq体系中的方法,通过该方法可以获取到调用者在
他的兄弟标签中的下标
                    var count = $(event.target).index() + 1;
                    alert('当前选择的是第' + count + '个按钮');
                });
*/

            // on()方法中的第二个参数可以传递选择器
            // 在事件委托中,通过父标签响应子标签的事件时,只有被选择器匹配的
标签触发的事件,才能触发执行父标签的事件函数;如果触发事件的子标签并没
有被选择器匹配,则父标签的事件函数不会执行。

            $('#div').on('click', '.btn', function(event) {
                alert('当前是第' + $(event.target).index()+'个按钮');
            })

            }

解密jQuery事件核心:http://www.cnblogs.com/aaronjs/p/3444874.html

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

推荐阅读更多精彩内容