JS綁定.on的hover事件

今天項目中UI設計了一個鼠標劃入和劃出的效果,原本這個小效果是很是簡單的!但是在實際的生產環境中就出現了一點點問題!由於在實際的環境中,數據所有是用ajax異步加載進去的,這樣就形成了hover方法不能用了。先看一下原來的代碼:javascript

1 $('ul li').hover(function(){
2     $(this).addClass('hover');
3 },function(){
4     $(this).removeClass('hover');
5 })複製代碼

原理也很是簡單,就是在鼠標進入的時候,給這個Li加入hover的類名,而後鼠標劃出的時候刪除這個類名。很是簡單的小效果。ajax異步加載咱們就要用時間綁定了,把這個事件綁定在他們的父元素ul上(li是動態異步添加的),因而有了下面的代碼:php

1 $('ul').on('hover','li',function(){
2     $(this).addClass('hover');
3 },function(){
4     $(this).removeClass('hover');
5 })複製代碼

後來發現並不能行啊!!!想一想也是啊,爲何第三個參數!html

  這裏就要複習一下on的用法了,咱們這裏用的on事件實際上是原來的delegate事件。詳細的信息請移步:www.runoob.com/jquery/even…,delegate中第二個參數也就是我們寫的Li是必須的,不能缺乏。若是不懂得話能夠百度,也能夠查看下面的連接www.jb51.net/article/462… 並且我還發現,hover是jQuery本身封裝的函數,並非javascript的函數,而且java

jQuery 1.7 版本前該方法觸發 mouseentermouseleave 事件。jquery

jQuery 1.8 版本後該方法觸發 mouseover mouseout 事件ajax

也就是說hover時間在不一樣的jq版本中是不同的,mouseenter是沒有冒泡事件的,而mouseover會發生冒泡時間,mouseleave和mouseout同樣。具體狀況請看下面的小實驗:www.runoob.com/try/try.php… 相信看了這個後就很是清楚了。bash

  回到我們的問題,若是想給異步加載的Li加載上鼠標劃入和劃出事件,那就只能本身綁定兩個事件了!異步

$('ul').on('mouseenter', 'li', function() {//綁定鼠標進入事件
    $(this).addClass('hover');
});
$('ul').on('mouseleave', 'li', function() {//綁定鼠標劃出事件
    $(this).removeClass('hover');
});複製代碼

這樣的話就能實現鼠標的事件了!函數

相關文章
相關標籤/搜索