2012-01-20 10 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()'は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には合計新しいイベント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