首页 > 代码库 > jQuery-事件

jQuery-事件

  • event handler 事件句柄;事件处理程序

鼠标事件:

  • click() 单击

dblclick() 双击事件

可以传递参数,或者不传递$ele.click( [eventData ], handler(eventObject) )

$("#test").click(11111,function(e) {
    //this指向 div元素
    //e.data  =http://www.mamicode.com/> 11111 传递数据>

  

  • mousedown() 可以监听用户鼠标按下的操作,与其对应的还有一个方法mouseup快捷方法可以监听用户鼠标弹起的操作.

用event 对象的which区别按键,敲击鼠标左键which的值是1,敲击鼠标中键which的值是2,敲击鼠标右键which的值是3

mouseup与mousedown组合起来就是click事件

$("#test").mousedown(11111,function(e) {
    //this指向 div元素
    //e.data  =http://www.mamicode.com/> 11111 传递数据>
  •  mousemove() 监听用户移动的的操作
$(".aaron1").mousemove(function(e) {
        $(this).find(‘p:last‘).html(‘移动的X位置:‘ + e.pageX)
    })
  •   mouseover()与mouseout()事件,监听用户的移入移出操作,
var n = 0;
        //绑定一个mouseover事件
        $(".aaron1 p:first").mouseover(function(e) {
            $(".aaron1 a").html(‘进入元素内部,mouseover事件触发次数:‘ + (++n))
        })

<div id="test">点击触发<div>
$("#test").mouseover(11111,function(e) {
    //this指向 div元素
    //e.data  =http://www.mamicode.com/> 11111 传递数据>

  

  • mouseenter和mouseleave 知道用户操作鼠标是否有移到元素内部或是元素外部,
    mouseover会冒泡,
    mouseenter事件只会在绑定它的元素上被调用,而不会在后代节点上被触发
 $(".aaron2 p").mouseenter(function(e) {
            $(".aaron2 a:first").html(‘mouseenter事件触发次数:‘ + (++i))
        })
  •  hover 移进移出
$(selector).hover(handlerIn, handlerOut)

  handlerIn(eventObject):当鼠标指针进入元素时触发执行的事件函数

  handlerOut(eventObject):当鼠标指针离开元素时触发执行的事件函数

// hover()方法是同时绑定 mouseenter和 mouseleave事件。
    // 我们可以用它来简单地应用在 鼠标在元素上行为
    $("p").hover(
        function() {
            $(this).css("background", ‘red‘);
        },
        function() {
            $(this).css("background", ‘yellow‘);
        }
    );
  • focusin() 元素获得焦点的时候触发,如input,用户在点击聚焦的时候,如果开发者需要捕获这个动作的时候,jQuery提供了一个focusin事件  
 //input聚焦
        //给input元素增加一个边框
        $("input:first").focusin(function() {
             $(this).css(‘border‘,‘2px solid red‘)
        })

  

  • focusout() 元素失去焦点的时候使用

表单事件

  • focus(), blur() 在元素本身产生,不支持冒泡。focusin()在元素包含的元素中产生,支持冒泡。focusin里面的元素有焦点时,冒泡到上级元素,寻找事件。
//点击里面包含的元素才有作用,写成focus没有用
$(".aaron").focusin(function() { $(this).css(‘border‘, ‘2px solid red‘) })
  •   change(),监听<input>元素,<textarea>和<select>元素的值发生改变, 失去焦点时触发
//监听input值的改变
    $(‘.target1‘).change(function(e) {
        $("#result").html(e.target.value)
    });
  • select()事件,用于<input>元素与<textarea>元素,元素中的文本被选择时
 //监听textarea元素中value的选中
    $(‘textarea‘).select(function(e) {
        alert(window.getSelection().toString());//非IE内核浏览器可以用这种方法,考虑兼容性的话你可以用getselectionstart()和getselectionend()
    });

//alert(e.target.value.substring(e.currentTarget.selectionStart,e.currentTarget.selectionEnd));
  • submit() 监听提交动作,(例如:验证表单输入的正确性,如果错误就阻止提交,从新输入)

 具体能触发submit事件的行为:

<input type="submit">

<input type="image">

<button type="submit">

当某些表单元素获取焦点时,敲击Enter(回车键)

$(‘#target2‘).submit(function() {
        alert(‘捕获提交表达动作,阻止页面跳转‘)
        return false;
    });

  键盘事件

  • keydown与keyup 监听键盘按下与松手. 支持中文
//监听键盘按键
    //获取输入的值
    $(‘.target1‘).keydown(function(e) {
        $("em:first").text(e.target.value)
    });

  keydown 是在按之前判断(当时text还没有内容),触发一次空,当下一次按键时,就触发上一次输入的内容,所以就少一个。按下的一瞬间时 文字还没有输入到文本框所以第一次下边获取不到这个值。简单点说文字输入进去文本框这个行为要慢于keydown事件。

技术分享

  • keypress() 不接收中文字符,类似于keydown(), 主要用来接收字母、数字等ANSI字符,而 KeyDown 和 KeyUP 事件过程可以处理任何不被 KeyPress 识别的击键。诸如:功能键(F1-F12)、编辑键、定位键以及任何这些键和键盘换档键的组合等。

 

on()的多事件绑定

$("#elem").click(function(){})  //快捷方式
$("#elem").on(‘click‘,function(){}) //on方式

技术分享

 

事件机制委托的机制

技术分享

  • 通过.on()绑定的事件处理程序
  • 通过off() 方法移除该绑定

事件对象,e.target 

event.target

target 属性可以是注册事件时的元素,或者它的子元素。通常用于比较 event.target 和 this 来确定事件是不是由于冒泡而触发的。经常用于事件冒泡时处理事件委托

简单来说:event.target代表当前触发事件的元素,可以通过当前元素对象的一系列属性来判断是不是我们想要的元素

  • event.pageX 和 event.pageY:获取鼠标当前相对于页面的坐标
  • event.preventDefault() 方法:阻止默认行为
  • event.stopPropagation() 方法:阻止事件冒泡
  • event.which:获取在鼠标单击时,单击的是鼠标的哪个键
  • event.currentTarget : 在事件冒泡过程中的当前DOM元素。冒泡前的当前触发事件的DOM对象, 等同于this.

 

this和event.target的区别:

js中事件是会冒泡的,所以this是可以变化的,但event.target不会变化,它永远是直接接受事件的目标DOM元素;

.this和event.target都是dom对象

如果要使用jquey中的方法可以将他们转换为jquery对象。比如this和$(this)的使用、event.target和$(event.target)的使用.

 

  • trigger() 根据绑定到匹配元素的给定的事件类型执行所有的处理程序和行为
  • triggerHandler与trigger的用法是一样的,重点看不同之处:

triggerHandler不会触发浏览器的默认行为,.triggerHandler( "submit" )将不会调用表单上的.submit()

.trigger() 会影响所有与 jQuery 对象相匹配的元素,而 .triggerHandler() 仅影响第一个匹配到的元素

使用 .triggerHandler() 触发的事件,并不会在 DOM 树中向上冒泡。 如果它们不是由目标元素直接触发的,那么它就不会进行任何处理

与普通的方法返回 jQuery 对象(这样就能够使用链式用法)相反,.triggerHandler() 返回最后一个处理的事件的返回值。如果没有触发任何事件,会返回 undefined

 

    //给input绑定一个聚焦事件
    $("input").on("focus",function(event,title) {
        $(this).val(title)
    });

    $("#accident").on("click",function() {
        alert("trigger触发的事件会在 DOM 树中向上冒泡");
    });
    //trigger触发focus
    $("button:first").click(function() {
        $("a").trigger("click");
        $("input").trigger("focus");
    });

    //triggerHandler触发focus
    $("button:last").click(function() {
        $("a").triggerHandler("click");
        $("input").triggerHandler("focus","没有触发默认聚焦事件");
    });

  

 

jQuery-事件