2012-03-09 8 views
0

ライブ要素でマウスセンターに問題があります。 javacriptで追加された選択された要素の上にカーソルを置くと、関数はトリガされません。ライブ要素でマウスを移動するにはどうすればよいですか?

this.fixElements = function() { 
    $('.iconstarsdynamic.isgradeable:not(.touched)').each(function(){ 
     var $self = $(this), 
       $gradeLength = Math.round(parseInt($self.width())/$maxGrade*100)/100; 

     $self.addClass('touched'); 

     for ($i = 1; $i <= $maxGrade; ++$i) { 
      $('<span />', { 
       "class" : "grader", 
       "z-index" : $i, 
       "width" : ($gradeLength*$i)+'px' 
      }).attr('grade', $i).appendTo($self); 
     } 
    }); 
} 

、私はこれでmouseenterにしてみてください:

私はこれで要素を追加

this.hover = function() { 
    $('.iconstarsdynamic.isgradeable') 
     .on('mouseenter', '.grader', function(){ 
      $(this).css('visibility', 'visible'); 
      console.log('over'); 
     }) 
     .on('mouseleave', '.grader', function(){ 
      $(this).css('visibility', 'hidden'); 
     }); 
} 

私の出力は次のようになります。

<span class="iconstarsdynamic isgradeable touched" title="Rated 0 out of 4"> 
    <span class="stars" style="width:0%;"></span> 
    <span class="grader" z-index="1" style="width: 9.25px; " grade="1"></span> 
    <span class="grader" z-index="2" style="width: 18.5px; " grade="2"></span> 
    <span class="grader" z-index="3" style="width: 27.75px; " grade="3"></span> 
    <span class="grader" z-index="4" style="width: 37px; " grade="4"></span> 
</span> 

問題があることですmouseenterは実行されません。どうしてこれなの? mouseenter.iconstarsdynamic.isgradeableに添付すれば動作しますが、それは私が望むものではありません。私はそれを.iconstarsdynamic.isgradeable .graderに添付します。

答えて

0

イベントmouseentermouseleaveイベントはバブルアップしないため、使用するイベント委譲メソッドでは機能しません。代わりにmouseovermouseoutを使用する必要があります(もしあれば、子孫のイベントを処理する必要があるかもしれません)。

+0

私は 'mouseover'と' mouseout'を試しました。同じ問題ですが、何も起こりません。 – Marwelln

+0

はい、そうです:http://jsfiddle.net/x57Ec/。しかし、ホバリング時にホバリングされた要素を表示させようとしていますか? 'mouseover'イベントは可視要素に対してのみ発生します。そうでない場合は、要素を隠すために' opacity:0'を使うべきです。 –

+0

要素は 'visibility:hidden'で隠されていて、それができないことを知らなかった。ありがとう。 – Marwelln

関連する問題