Python笔记:jQuery和js库 10.7——jQuery事件

一、事件函数列表:

  • blur() :元素失去焦点
  • focus():元素获得焦点

focus的一般用法:

$('#input01').focus();

这条语句的效果是打开网页时,使用focus方法的标签(一般是Input type="text")自动被选中,可以直接输入内容。

blur的效果:既然获得焦点是自动选中文本框,那么失去焦点就是在移出文本框时触发一定的效果。
比如:

$('#input01').blur(function(){
    // 获取input元素的值
    var sVal = $(this).val();
    alert(sVal);
})

这段语句的效果就是当移出文本框时,弹出文本框中的内容。

  • click():鼠标单击
    这个之前经常用,也比较好理解,就不多说了。
  • mouseover():鼠标进入(进入子元素也触发)
  • mouseout():鼠标离开(离开子元素也触发)
  • mouseenter():鼠标进入(进入子元素不触发)
  • mouseleave():鼠标离开(离开子元素不触发)
    和鼠标有关的事件都比较好理解,也比较好实现。
// 子元素触发
$('.con').mouseover(function(){
    alert('移入');
})
$('.con').mouseout(function(){
    alert('移出');
})

// 子元素不触发
 $('.con2').mouseenter(function(){
    alert('移入');
})
$('.con2').mouseleave(function(){
    alert('移出');
})
  • hover():同时为mouseenter和mouseleave事件指定处理函数。
    使用hover()可以代替上面的mouseenter()和mouseleave()。
// 和上面子元素不触发的语句等价
$('.con2').hover(function(){
    alert('移入');
},function(){
    alert('移出');
}) 
  • ready():DOM加载完成
    ready事件之前也用过很多次了,就是获取,可以简写成一个$(function(){})

  • resize():浏览器窗口的大小发生改变

$(window).resize(function(){
    var $w = $(window).width();

    document.title = $w;
})

resize常常用来直接用在$(window)上,上面这条语句的效果是当浏览器窗口尺寸发生变化时,在title上显示当前窗口的宽度。

  • scroll():滚动条的位置发生变化
    也比较好理解,就是当滚动页面的时候触发一定的效果

  • submit(): 用户递交表单
    一般用在form标签上,可以获取到数据提交时返回的值。

二、绑定事件的其他方式

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

这种方式可以绑定多个事件。

取消绑定事件(可以全部取消,也可以取消单个)

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

        // $(this).unbind();
        $(this).unbind('mouseover');

    });
});

三、事件冒泡

什么是事件冒泡

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

事件冒泡的作用

事件冒泡允许多个操作被集中处理(把事件处理器添加到一个父级元素上,避免把事件处理器添加到多个子级元素上),它还可以让你在对象层的不同级别捕获事件。

阻止事件冒泡

事件冒泡机制有时候是不需要的,需要阻止掉,通过 event.stopPropagation() 来阻止。
例:

$(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>

在这个例子中我们定义了三个嵌套的盒子(father>son>grandson),并给每个box建立一个click事件。
在不使用语句event.stopPropagation()的情况下,我们点击grandson时,会依次弹出grandson、son、father,这就是事件冒泡。同理,点击son时,会依次弹出son、father。

有些时候我们并不想要这种冒泡机制,他会妨碍我们的效果,这时候就要使用

event.stopPropagation();

和上面的代码一样,我们在使用这个语句的时候需要在function()里添加一个event参数。
使用阻止冒泡机制的语句后,再次点击grandson时,就只会弹出grandson了。

阻止默认行为

阻止表单提交

$('#form1').submit(function(event){
    event.preventDefault();
})

合并阻止操作

实际开发中,一般把阻止冒泡和阻止默认行为合并起来写,合并写法可以用

// event.stopPropagation();
// event.preventDefault();

// 合并写法:
return false;
  • 阻止默认行为、阻止事件冒泡的语句都可以用return false代替,事实上也很少用那两个语句。

四、事件委托

事件委托就是利用冒泡的原理,把事件加到父级上,通过判断事件来源的子集,执行相应的操作,事件委托首先可以极大减少事件绑定次数,提高性能;其次可以让新加入的子元素也可以拥有相同的操作。

一般绑定事件的写法
$(function(){
    $ali = $('#list li');
    $ali.click(function() {
        $(this).css({background:'red'});
    });
})
...
<ul id="list">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
</ul>
事件委托的写法
$(function(){
    $list = $('#list');
    $list.delegate('li', 'click', function() {
        $(this).css({background:'red'});
    });
})
...
<ul id="list">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
</ul>

看起来好像没什么区别,但是在特定场景下事件委托十分的方便。
比如我现在用jquery语句新加一个li

var $li = $('<li>9</li>');
$('.list').append($li);

如果我们用的是一般绑定事件,执行之后我们点击第九个li,它的背景颜色是不会变的。想要变的话必须要给第九个li单独编写一个绑定。

但是如果我们使用事件委托,把添加li的语句写在事件委托下面,保存执行后,点击第九个标签也会改变背景颜色。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,643评论 1 11
  • 总结: 鼠标事件 1.click与dbclick事件$ele.click()$ele.click(handler(...
    阿r阿r阅读 1,704评论 2 10
  • 本篇博客源地址 总结: 鼠标事件 1.click与dbclick事件ele.click()ele.click(ha...
    ZombieBrandg阅读 737评论 0 1
  • 第1章 鼠标事件 1-1 jQuery鼠标事件之click与dbclick事件 用交互操作中,最简单直接的操作就是...
    mo默22阅读 1,339评论 0 6
  • 敬爱的李老师,智慧的教授,亲爱的贾总,赵总,亲爱的家人们:大家好! 我是人民商场珠宝城的孙建红,今天是我日精进行动...
    知足常乐孙阅读 120评论 0 0

友情链接更多精彩内容