1. 程式人生 > >jquery中取消和繫結hover事件的正確方式

jquery中取消和繫結hover事件的正確方式

在網頁設計中,我們經常使用jquery去響應滑鼠的hover事件,和mouseover和mouseout事件有相同的效果,但是這其中其中如何使用bind去繫結hover方法呢?如何用unbind取消繫結的事件呢?

一、如何繫結hover事件

先看以下程式碼,假設我們給a標籤繫結一個click和hover事件:

$(document).ready(function(){
    $('a').bind({
        hover: function(e) {
            // Hover event handler
            alert("hover");
        },
        click: function(e) {
            // Click event handler
            alert("click");
        }
    });
});

當點選a標籤的時候,奇怪的事情發生了,其中繫結的hover事件完全沒有反應,繫結的click事件卻可以正常響應。

但是如果換一種寫法,比如:

$("a").hover(function(){
    alert('mouseover');
}, function(){
    alert('mouseout');
})

這段程式碼就可以正常的執行,難道bind不能繫結hover?

其實不是,應該使用 mouseenter 和 mouseleave 這兩個事件來代替,(這也是 .hover() 函式中使用的事件) 所以完全可以直接像這樣來引用:

$(document).ready(function(){
    $('a').bind({
        mouseenter: function(e) {
            // Hover event handler
            alert("mouseover");
        },
        mouseleave: function(e) {
            // Hover event handler
            alert("mouseout");
        },
        click: function(e) {
            // Click event handler
            alert("click");
        }
    });
});

因為.hover()是jQuery自己定義的事件,是為了方便使用者繫結呼叫mouseenter和mouseleave事件而已,它並非一個真正的事件,所以當然不能當做.bind()中的事件引數來呼叫。

二、如何取消hover事件

大家都知道,可以使用unbind函式去取消繫結的事件,但是隻能取消通過bind繫結的事件,jquery中的hover事件是比較特殊的,如果通過這種方式去繫結的事件,則無法取消。

$("a").hover(function(){
    alert('mouseover');
}, function(){
    alert('mouseout');
})

取消繫結的hover事件的正確方式:

$('a').unbind('mouseenter').unbind('mouseleave');

三、總結

其實,這些問題可以去參看jquery官方的說明文件,只是很少有人去看過,網上的大多數教程只是講解如何去使用這個方法,達到目的即止,並沒有深入的瞭解為什麼這麼寫?