2013-03-01 153 views
0

這是我有:()與懸停 - jQuery的

$('#blah').hover(function(){ 
    $('etc').show(); 
}, function(){ 
    $('etc').hide(); 
}); 

這一切正常,現在我想確切上面的代碼與()方法的工作生活:

$('#blah').on('hover', function(){ 
    $('#etc').show(); 
}, function(){ 
    $('#etc').hide(); 
}); 

但這不起作用,有人知道爲什麼嗎?而且這個工程:

$('#blah').on('hover', function(){ 
    $('#etc').show(); 
}); 

當我使用的是()方法,回調函數不工作,所以我用與(鼠標懸停()和鼠標離開())和它的工作,我只是想知道爲什麼懸停回調不與(工作),這是如此比使用2個事件簡單....

感謝

回答

2

JQuery源代碼,hover不包括在事件列表觸發導致JQuery的.on()

jQuery.each(("blur focus focusin focusout load resize scroll unload click dblclick " + 
    "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + 
    "change select submit keydown keypress keyup error contextmenu").split(" "), function(i, name) { 

    // Handle event binding 
    jQuery.fn[ name ] = function(data, fn) { 
     return arguments.length > 0 ? 
      this.on(name, null, data, fn) : 
      this.trigger(name); 
    }; 
}); 

這是因爲.hover()僅僅是jQuery的.mouseenter().mouseleave()

快捷方式
jQuery.fn.hover = function(fnOver, fnOut) { 
    return this.mouseenter(fnOver).mouseleave(fnOut || fnOver); 
}; 

我希望這個簡短的解釋提供一點指導。

0

使用

jQuery.on("hover","#blah", function..) 

或者你可以使用切換的功能jQuery也是

+3

有什麼不同?你正在向它傳遞一個上下文。 – 2013-03-01 09:50:53

+0

不工作.... – behz4d 2013-03-01 09:51:19

0

是的,它不會工作,因爲當你使用.on()hover然後hover事件只是有一個回調函數,而不是您可以使用多個事件中.on()

嘗試

$("DOM").on({ 
    mouseenter: function() { 
     // Handle mouseenter... 
    }, 
    mouseleave: function() { 
     // Handle mouseleave... 
    } 
}); 
1

使用的mouseenter和鼠標離開懸停。使用懸停在here上進行檢查。

$("#blah").on(
{ 
    mouseenter: function() 
    { 
     //stuff to do on mouseover 
    }, 
    mouseleave: function() 
    { 
     //stuff to do on mouseleave 
    } 
}); 

使用切換顯示/隱藏,

$('#blah').on('hover', function(){ 
    $('#etc').toggle(); 
}); 
+0

不相關,我已經找到了解決問題的辦法,我只是想知道爲什麼它不工作,但一個好點,謝謝 – behz4d 2013-03-01 09:52:35

+0

@ behz4d它不工作,因爲當你使用懸停使用它只有一個回撥看到我的答案.. – 2013-03-01 09:53:25

1

這是因爲hover是不是一個真正的瀏覽器事件,其實它只是一個速記調用

$(selector).mouseenter(handlerIn).mouseleave(handlerOut); 

.on('hover')使用從版本1.8開始形成have been deprecated

0

使用翻轉()

$('#blah').on('hover', function(){ 
    $('#etc').toggle(); 
}); 
3

從jQuery的文檔。 Jquery on

棄用的jQuery 1.8:用作速記 字符串「的mouseenter鼠標離開」這個名字「懸停」。它爲這兩個事件附加一個事件處理程序 ,並且處理程序必須檢查event.type爲 ,以確定事件是mouseenter還是mouseleave。不要 將「懸停」僞事件名稱與.hover()方法混淆,其中 接受一個或兩個函數。

$("div.test").on({ 
    mouseenter: function(){ 
    $(this).addClass("inside"); 
    }, 
    mouseleave: function(){ 
    $(this).removeClass("inside"); 
    } 
});