2012-02-24 9 views
1

私はこのコードに問題があります。mouseleave関数は、divの最初にマウスを置かずにIEで起動しています。IEでのJquery mouseleave autofires

<script type="text/javascript"> 
$(document).ready(function() { 
    $('#<?php echo 'div_'.$reload_cont; ?>').mouseenter(function() { 

     var el = $(this); 
     var timeoutId = setTimeout(function() { 
      $('#<?php echo 'relo_'.$reload_cont; ?>').animate({opacity: 1}, 'slow'); 
     }, 500); 

     el.mouseleave(function() { 
      clearTimeout(timeoutId); 
      $('#<?php echo 'relo_'.$reload_cont; ?>').animate({opacity: 0}, 'slow'); 
     }); 
    }); 
}); 

</script> 

私は多くの方法を試しましたが、どれもうまくいかないようです。

ここにすべてのヘルプ

+1

あなたのマークアップを表示できますか? – ShankarSangoli

答えて

2

あなたはmouseleaveイベントごとに時刻を再結合されているmouseenterイベントが発生し、mouseenterイベントハンドラ外mouseleaveイベントハンドラを動かしてみてください。

$(function() { 

    //notice the timeout variable is saved in a scope where both event handlers can access it 
    var timeoutId; 

    $('#<?php echo 'div_'.$reload_cont; ?>').mouseenter(function() { 

     timeoutId = setTimeout(function() { 
      $('#<?php echo 'relo_'.$reload_cont; ?>').stop().animate({opacity: 1}, 'slow'); 
     }, 500); 
    }).mouseleave(function() { 
     clearTimeout(timeoutId); 
     $('#<?php echo 'relo_'.$reload_cont; ?>').stop().animate({opacity: 0}, 'slow'); 
    }); 
}); 

お知らせの使用.stop()あなたがマウスを入力して何度もマウスを離すと、複数のアニメーションがキューに入れられません。ここで

はデモです: http://jsfiddle.net/jasper/LJAqd/

私はIE 8/7でこれをテストし、期待どおりに働いたが、私はHTMLの構造を知らないので、私はそれはあなたの実装のために働くと確信してすることはできませんあなたのコードの。

+0

ありがとう、これは動作します、私はまだ古いコードがありますが、実装全体を地面から書き直すことにしました。この方法は簡単で、マウスの離脱はマウスセンターの実装の外側で宣言する必要があることがわかりました。おかげさまで – carcargi

関連する問題