jQuery基础——事件篇

jQuery基础——事件篇

鼠标事件

click与dbclick事件

click方法监听用户单击操作,dbclick监听用户双击操作,这两个方法类似。
dbclick与click事件不同的是

click事件触发需要以下几点:

  • click事件其实是由mousedown与mouseup 2个动作构成,所以点击的动作只有在松手后才触发

dblclick事件触发需要以下几点:
dblclick又是由2个click叠加而来的,所以dblclick事件只有在满足以下条件的情况下才能被触发

  • 鼠标指针在元素里面时点击。
  • 鼠标指针在元素里面时释放。
  • 鼠标指针在元素里面时再次点击,点击间隔时间,是系统而定。
  • 鼠标指针在元素里面时再次释放。

方法一:$ele.click()
用来手动触发事件
方法二:$ele.click( handler(eventObject) )

    

function(e)中的e代表的是event,具体理解请参考In Javascript/jQuery what does (e) mean?。比如 e.preventDefault 可以屏蔽掉原有控件的一些事件,执行新的事件。

$('a').click(function(e) {
    e.preventDefault();
}

jQuery基础——事件篇_第1张图片

方法三:$ele.click( [eventData ], handler(eventObject) )
使用与方法二一致,不过可以接受一个数据参数,这样的处理是为了解决不同作用域下数据传递的问题


mousemove事件

mouseover与mouseout事件

用来监听用户的移入移出操作


mouseenter与mouseleave事件

mouseenter事件和mouseover的区别
关键点就是:冒泡的方式处理问题

简单的例子:
mouseover为例:

鼠标离开此区域触发mouseleave事件

如果在p元素与div元素都绑定mouseover事件,鼠标在离开p元素,但是没有离开div元素的时候,触发的结果:

  1. p元素响应事件
  2. div元素响应事件

这里的问题是div为什么会被触发? 原因就是事件冒泡的问题,p元素触发了mouseover,他会一直往上找父元素上的mouseover事件,如果有全触发了

所以在这种情况下面,jQuery推荐我们使用 mouseenter事件

mouseenter事件只会在绑定它的元素上被调用,而不会在后代节点上被触发


hover事件

在元素上移进移出切换其换色,一般通过2个事件配合就可以达到,这里用mouseenter与mouseleave,这样可以避免冒泡问题

$(ele).mouseenter(function(){
     $(this).css("background", '#bbffaa');
 })
$(ele).mouseleave(function(){
    $(this).css("background", 'red');
})

但是这样有点复杂,可以使用hover方法代替$(selector).hover(handlerIn, handlerOut)

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

如下:

    $("p").hover(
        function() {
            $(this).css("background", 'red');
        },
        function() {
            $(this).css("background", '#bbffaa');
        }
    );

focusin事件

当一个元素,或者其内部任何一个元素获得焦点的时候,可以使用focusin方法


或者


focusout事件

当一个元素,或者其内部任何一个元素失去焦点的时候,可以使用focusout方法


表单事件

blur与foucus事件

它们之间的本质区别:是否支持冒泡处理
举个简单的例子

其中input元素可以触发focus()事件

div是input的父元素,当它包含的元素input触发了focus事件时,它就产生了focusin()事件。

focus()在元素本身产生,focusin()在元素包含的元素中产生

blur与focusout也亦是如此


change事件

元素,