zoukankan      html  css  js  c++  java
  • jQuery(4)—— jQuery中的事件

    jQuery中的事件

    【加载DOM】

    在常规的JavaScript代码中,通常使用window.onload方法,在jQuery中,使用的是$(document).ready()方法。极大地提高了web应用程序的响应速度。

    执行时机

    此方法在DOM完全就绪时就可以被调用。因此可能此时元素的关联文件未下载完。由此可以使用jQuery中另一个关于页面加载的load()方法。load()方法会在元素onload事件中绑定一个处理函数。如果函数绑定给window对象,则会在所有内容加载完毕后触发,如果处理函数绑定在元素上,则会在元素的内容加载完毕后触发。

    $(window).load(function(){
        //编写代码
    })

    多次使用:JavaScript的onload事件只能保存对一个函数的引用,它会自动用后面的函数覆盖前面的函数。而jQuery的$(document).ready()方法能很好的处理这些情况。

    简写方式:$(document).ready(function(){])可以简写为$(function(){})。而且$(document)可以简写为$(),当$()不带参数时,默认参数是document,因此可以简写为$().ready(function(){})。

    【事件绑定】

    可以使用bind()方法来对匹配元素进行特定事件的绑定,其调用格式为:bind(type[,data],fn);

    bind()方法有三个参数:第一个是事件类型;第二个是可选参数,作为event.data属性值传递给事件对象的额外数据对象;第三个是用来绑定的处理函数。

    基本效果

    <div id="pane1">
        <h5 class="head">什么是jQuery?</h5>
        <div class="content">
            jQuery就是jQuery啊,要想知道,自己百度去。
        </div>
    </div>

    再加上它的jQuery代码:

    $(function(){
        $("#pane1 h5.head").bind("click",fuction(){
            $(this).next().show();   //$(this).next():获取“内容”元素
        })
    })

    加强效果:单击标题链接,内容出现,再击,内容消失。jQuery代码如下

    $(function(){
        $("pane1 h5.heaf").bind("click",function(){
            var $content=$(this).next();
            if($content.is(":visible")){    //如果“内容”显示
                $content.hide();
            }else{
                $concent.show();
            }
        })
    })

    改变绑定事件的类型:把事件类型从click换成mouseover和mouseout。即当光标滑过时,就触发事件。jQuery代码如下

    $(function(){
        $("pane1 h5.heaf").bind("mouseover",function(){
               $(this).next().show();
            }).bind("mouseout",function(){
               $(this).next().hide();
        })
    })

    简写绑定事件:如上代码改写成使用简写绑定事件的方式

    $(function(){
        $("pane1 h5.heaf").mouseover(function(){
               $(this).next().show();
            }).mouseout(function(){
               $(this).next().hide();
        })
    });

    【合成事件】

    jQuery有两个合成事件——hover()方法和toggle()方法,都属于jQuery自定义的方法。

    hover()方法:语法结构为hover(enter,leave);用于模拟光标悬停事件,当光标移动到元素上时,会触发指定的第一个函数(enter);当光标移出这个元素时,会触发指定的第二个函数(leave)。

    toggle()方法:语法结构为toggle(fn1,fn2,...fnN);用于模拟鼠标连续单击事件,第一次单击,触发第一个;第二次,触发第二个;依次触发。直到最后一个,随后的每次单击都重复对这几个函数的轮番调用。

    toggle()方法在jQuery中还有一个作用:切换元素的可见状态。如果元素是可见的,单击切换后则为隐藏,反之则可见。具体的在《锋利的jQuery》的P107页。

    【事件冒泡】

    事件冒泡引发的问题:有可能会引发意料之外的效果,因此,有必要对事件的作用范围进行限制。

    事件对象:在程序中使用事件对象,只需为函数添加一个参数即可。jQuery代码如下:

    $("element").bind("click",function(event){  //event:事件对象
        //......
    });

    当单击“element”元素时,事件对象就被创建了。这个事件对象只有事件处理函数才能访问到。事件处理函数执行完毕后,事件对象就销毁了。

    停止事件冒泡:可以阻止事件中其他对象的事件处理函数被执行。在jQuery中提供了stopPropagation()方法来停止事件冒泡。

    $('span').bind("click",function(event){
        var txt=$('#msg').html()+"<p>内层span元素被单击</p>";
        $('#msg').html(txt);
        event.stopPropagation();         //停止事件冒泡
    });

    当单击<span>元素时,只会触发<span>元素上的click事件,而不会触发<div>元素和<body>元素的click事件。

    阻止默认行为:preventDefault()方法。如果想同时对事件对象停止冒泡和默认行为,可以在事件处理函数中返回false。这是在对事件对象上同时调用stopPropagation()方法和preventDefault()方法的一种简写方式。

    事件捕获:事件捕获和事件冒泡是刚好相反的两个过程,事件捕获是从最顶端往下开始触发。

    并非所有主流浏览器都支持事件捕获,并且这个缺陷无法通过JavaScript来修复。jQuery不支持事件捕获。

    【事件对象的属性】

    event.type:可以获取到事件的类型。

    event.preventDefault()方法:阻止默认的事件行为。JavaScript中符合W3C规范的该方法在IE浏览器中无效,jQuery对其进行了封装,使之能够兼容各种浏览器。

    event.stopPropagation()方法:阻止事件的冒泡。JavaScript中符合W3C规范的该方法在IE浏览器中无效,jQuery对其进行了封装,使之能够兼容各种浏览器。

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

    event.relatedTarget:

    event.pageX和event.pageY:获取到光标相对于页面的x坐标和y坐标。

    event.which:在鼠标单击事件中获取到鼠标的左、中、右键;在键盘事件中获取键盘的按键。

    event.metaKey:为键盘事件中获取<ctrl>按键。

    【移除事件】

    移除按钮元素上以前注册的事件:unbind()方法。语法结构为:unbind([type],[data]);第一个参数是事件类型,第二个参数是将要移除的函数。说明如下:

    (1)如果没有参数,则删除所有绑定的事件;

    (2)如果提供了事件类型作为参数,则只删除该类型的绑定事件;

    (3)如果把在绑定时传递的处理函数作为第二个参数,则只有这个特定的事件处理函数会被删除。

    移除<button>元素的其中一个事件:需要为这些匿名处理函数指定一个变量。

    one()方法可以为元素绑定处理函数。语法结构为:one(type.[data],fn);

    one()方法为<button>元素绑定单击事件后,只在用户第一次单击按钮时,处理函数才执行,之后的单击毫无作用。

    【模拟操作】

    常用模拟:在jQuery中,可以使用trigger()方法完成模拟操作。如下可以来触发id为btn的按钮的click事件:

    $('btn').trigger("click");  也可以直接用简化写法click():$('#btn').click();

    触发自定义事件:trigger()方法还可以触发自定义名称的事件。

    传递数据:trigger(type,[data])方法有两个参数,第一个是要触发的事件类型,第二个是要传递给事件处理函数的附加数据,以数组形式传递。

    执行默认操作:

    //不仅会触发为<input>元素绑定的focus事件,也会使<input>元素本身得到焦点
    $("input").trigger("focus");

    triggerHandler()方法:只想触发绑定的focus事件,而不像执行浏览器默认操作。

    //会触发<input>元素上绑定的特定事件,同时取消浏览器对此事件的默认操作,即文本框只触发绑定的focus事件
    $("input").triggerHandler("focus");
  • 相关阅读:
    SQL分组统计
    实用DOS命令
    Shadertoy 教程 Part 6 使用光线步进算法创建3D场景
    浅谈web前端优化
    如何搭建一套前端监控系统
    with(this)中with的用法及其优缺点
    vue mvvm
    散列表(哈希表)(二)散列函数的构造方法
    作为程序员,你最常上的网站是什么
    散列表(哈希表)(一)散列表的概念
  • 原文地址:https://www.cnblogs.com/wlfsmile/p/5907284.html
Copyright © 2011-2022 走看看