2012-01-20 25 views
0

此作品(.hover):jQuery的:問題與.live()

$('a.directory:not(.trashContent), a.file:not(.trashContent)').hover(function() { 
    if (!dragged) $(this).find('a.suppr:first').show(); 
}, function() { 
    $(this).find('a.suppr:first').hide(); 
}); 

而且這不起作用(.live('hover')):

$('a.directory:not(.trashContent), a.file:not(.trashContent)').live('hover', function() { 
    if (!dragged) $(this).find('a.suppr:first').show(); 
}, function() { 
    $(this).find('a.suppr:first').hide(); 
}); 

任何想法,爲什麼?

+3

''hover''不是事件類型。 'hover()'是一個由jQuery定義的自定義速記方法。 –

+1

fyi,'live'被認爲在jquery的新版本中被棄用。 –

+1

您是否試過mouseout和mouseover事件? –

回答

3

爲什麼它不工作的原因是,懸停是不是真的單一事件。它將mouseenter和mouseleave的事件處理程序綁定在一起。手段懸停本身並不是一個真正的自己的事件處理程序。要使其與現場(更好的使用.on())一起工作,您必須使用事件處理程序分離。

$("#Element").live({ 
    mouseenter:function(){ 
    //do something 
    }, 
    mouseleave:function(){ 
    //do something 
    } 
}); 
+1

更好的是使用['.on()'](http://api.jquery.com/on/) –

+0

'live'方法已被棄用,如果使用jQuery版本1.7+使用'on'或者使用'delegate' – Rafay

-2

.live已過時。由於jQuery 1.7在jQuery中有全新的Event API,因此您應該使用.on()來處理所有事件。

一個例子:

$('a.directory:not(.trashContent), a.file:not(.trashContent)').on('mouseenter', function() { 
    console.log('You have hovered on ' + $(this)); 
}); 

你還可以用.is() combinated更好的選擇元素:

$('a.directory, a.file').is(':not(.trashContent)', function() { 
    var $elem = jQuery(this); 
    $elem.on('mouseenter', function() { 
    console.log('You have hovered on ' + $elem); 
    }); 
}); 
+0

你試過這個嗎? –

+0

是的,我隨後更新了它。 –

+1

您是否注意到您正在執行'.is'錯誤,這有點諷刺意味,因爲文檔鏈接就在它之上。 – Esailija