jQuery基础-事件篇

作者: 七_五 | 来源:发表于2017-07-23 17:05 被阅读0次

    1、鼠标事件

    常见的click等事件这里不做详细介绍

    • 1、mousemove: 用来监听用户移动的操作,基于移动的机制可以做出拖动、拖拽等一系列的效果出来。
      下面写一个监听鼠标移动的X位置的事件:
      HTML
    <style>
        .content {
          width: 300px;
          height: 200px;
          background: red;
        }
      </style>
    
      <div class="test">
        <div class="content">
          <p>鼠标在红色区域移动的事件</p>
          <p>移动的X的位置:</p>
        </div>
      </div>
    

    mousemove()方法

    $('.content').mousemove(function(e){
          $(this).find('p:last').html('移动的X的位置:'+e.pageX)
    })
    
    • 2、mouseover与mouseout事件
      jQuery当中提供了这样两个事件来监听用户的移入移出操作
      用法其实与上面的mousemove类似,这里就不写例子说明了,主要是为了总结鼠标常用的监听事件

    2、表单事件

    • 1、focus和blur事件
      分别是对获取焦点和失去焦点的监听,常用于表单的input标签中
      HTML
    <div class="test">
        点击触发焦点
        <input type="text" value="hello">
      </div>
    

    focus和blur事件

        let valText = $('.test input').val()
        //获取焦点的时候,清空input的值
        $('.test input').focus(function(){
          if(valText == 'hello') {
            $(this).val('')
          }
        })
        
        //失去焦点的时候input的占位值是'请输入'
        $('.test input').blur(function(){
          $(this).val('请输入')
        })
    
    • 2、change事件
      input元素、textarea和select元素的值都可以发生改变,当前改变的时候,我们可以通过change事件去监听这个改变的动作。

    input元素:

    监听value值的变化,当有改变时,失去焦点后触发change事件。对于单选按钮和复选框,当用户用鼠标做出选择时,该事件立即触发。

    select元素:

    对于下拉选择框,当用户用鼠标作出选择时,该事件立即触发

    textarea元素:

    多行文本输入框,当有改变时,失去焦点后触发change事件

    下面用一个例子说明:
    HTML

        <div class="left">
            <div class="aaron1">input:
                <input class="target1" type="text" value="监听input的改变" />
            </div>
            <div class="aaron2">select:
                <select class="target2">
                    <option value="option1" selected="selected">Option 1</option>
                    <option value="option2">Option 2</option>
                </select>
            </div>
            <div class="aaron3">textarea:
                <textarea class="target2" rows="3" cols="20">多行的文本输入控件</textarea>
            </div>
        </div>
        <p>输出结果:</p>
        <div id="result"></div>
    

    jQuery的change事件

    //监听input值的改变
    $('.target1').change(function(e) {
            $("#result").html(e.target.value)
    });
    //监听select
    $('.target2').change(function(e) {
            $("#result").html(e.target.value)
    });
    //监听textarea
    $('.target3').change(function(e) {
            $("#result").html(e.target.value)
    });
    

    代码演示

    3、事件的绑定和解绑

    jQuery on()是官方推荐的绑定事件的一个方法

    基本用法:on(events,[selector],[data],handler(eventObject))
    先可以看一个简单的用法,绑定一个点击事件:

    $('element').on('click',function(){
       //do something
    })
    

    多个事件绑定同一个函数:

    $('element').on("mouseover mouseout" ,function(){
        //do something
    })
    

    多个事件绑定不同的函数:

    $('element').on({
      mouseover:function(){},
      mouseout:function(){}
    })
    

    on还有高级的用法就是实现事件委托,下面我们举一个例子来说明
    HTML

    <div class="left">
      <div class="content">
         <a>点击这里</a>
      </div>
    </div>
    

    事件委托

    //事件的绑定在最上层的body上,当用户触发a元素上,事件将向上冒泡,一直到body上。
    //但是但我们提供了第二个参数(这里是a),那么事件在冒泡过程遇到选择器匹配元素(a),就触发回调函数的处理。
    $('body').on('click', 'a', function(e) {
           alert(e.target.textContent)
        })
    

    总结一下上面的事件委托:
    首先给body绑定一个click事件
    其次没有直接a元素绑定点击事件
    通过委托机制,点击a元素的时候,事件触发;点击其他地方事件并不会被触发

    代码演示

    • 卸载事件off()方法
      通过offIO方法移除该绑定

    4、事件对象的使用

    事件中的Event对象比较容易被我们所忽略,但有时候掌握它对我们也是很有用的
    一个标准的'click'点击事件:

    $(elem).on("click",function(event){
       event //事件对象
    })
    

    下面在来通过一个小例子来了解事件对象的作用
    HTML

    <ul>
        <li class="even1"></li>
        <li class="even2"></li>
        <li class="even3"></li>
    </ul>
    

    上面的ul有3个子元素,若需要响应每一个li事件,那么我们按照常规方法需要给所有的li都单独绑定一个事件监听,这样就显得很复杂。同时我们注意到所有的li都有一个共同的父元素,所有的事件都是一致的,那么我们可以用到on()绑定事件中的高级用法'事件委托'

    事件没直接和li元素发生关系,而且绑定父元素了。由于浏览器有事件冒泡的这个特性,我们可以在触发li的时候把这个事件往上冒泡到ul上,因为ul上绑定事件响应所以就能够触发这个动作了,那么我们需要如何才知道是触发了哪一个li元素了?

    这里就可以引出事件对象了:

    • 事件对象是用来记录一些事件发生时的相关信息的对象。事件对象只有事件发生时才会产生,并且只能是事件处理函数内部访问,在所有事件处理函数运行结束后,事件对象就被销毁

    上面的定义说的有点复杂,简单的我们需要记住事件的event.target这个属性,event.target代表当前触发事件的元素,可以通过当前元素对象的一系列属性来判断是不是我们想要的元素

    还是通过一段代码例子来演示说明,这里的代码就是上面拓展,大家运行以下就明白了event.target的用法:代码

    其实到了这里我们会发现这不是和this的功能有点像吗?其实this和event.target还是有区别的:js中事件是会冒泡的,所以this是可以变化的,但event.target不会变化,它永远是直接接受事件的目标DOM元素;

    总结以下常用的事件对象的属性和方法:

    • event.type:获取事件的类型
      触发元素的事件类型
    $("element").click(function(event) {
          alert(event.type); // "click"事件
    });
    
    • event.pageX 和 event.pageY:获取鼠标当前相对于页面的坐标
    • event.preventDefault() 方法:阻止默认行为
      这个用的很多,如点击一个链接(a标签),浏览器不会跳转到新的 URL 去了。
    $("a").click(function(event){
        event.preventDefault();
    });
    
    • event.stopPropagation() 方法:阻止事件冒泡
      事件是可以冒泡的,为防止事件冒泡到DOM树上,也就是不触发的任何前辈元素上的事件处理函数

    完!

    相关文章

      网友评论

        本文标题:jQuery基础-事件篇

        本文链接:https://www.haomeiwen.com/subject/gshmkxtx.html