6

私は、その中に存在するツールチップに関連するツールチップを起動するために活用している each メソッドを持ってい<td>ます。IE、Chrome、Safari ではすべてうまく機能しますが、Firefox には each メソッドが完全になく、DOM の最後のツールチップしか起動しません。

何を与える?

http://jsfiddle.net/yus5b/

HTML:

<div class="stage">
    <div class="dealFinder">
      <h2 class="title">Deal Finder in Your Area</h2>
      <table cellpadding="5">
          <tr>
          <td class="text">
              <p class="makeModel"><a href="#">2012 Land Rover Range Rover Evoque</a><br>in Oak Lawn</p>
            <a class="youSave" href="#" onclick="return false"> You Save at Least $14,810</a>
            <div class="tooltip">
              <div class="inner">
                <b>2012 Land Rover Range Rover Evoque</b>
                <span>Your Price $19,330</span>
                <p>The National Average is <b>$21,500</b></p>
              </div>
            </div>
          </td>
            <td class="pic">
              <a href="#"><img src="http://placehold.it/113x75" /></a>
          </td>
        </tr>
        <tr>
          <td class="text">
            <p class="makeModel"><a href="#">2012 Land Rover Range Rover Evoque</a><br>in Oak Lawn</p>
            <a class="youSave" href="#" onclick="return false"> You Save at Least $14,810</a>
            <div class="tooltip">
              <div class="inner">
                <b>2012 Land Rover Range Rover Evoque</b>
                <span><small>Your Price</small> $19,330</span>
                <p>The National Average is <b>$21,500</b></p>
              </div>
            </div>
          </td>
          <td class="pic">
            <a href="#"><img src="http://placehold.it/113x75" /></a>
          </td>
        </tr>
      </table>
    </div><!-- .dealFinder -->
</div>​

jQuery:

$(document).ready(function() {
    // Tooltip
    $('.tooltip').hide();
    $('.text').each(function(e) {
      var self = this;
      var tooltip = $(self).find('.tooltip');
      var youSave = $(self).find('.youSave');
      $(youSave).mouseenter(function(e) {
        $(self).find(tooltip).fadeIn("slow");
      });
      $(youSave).mouseleave(function(e) {
        $(self).find(tooltip).fadeOut("fast");
      });
    });
});​
4

2 に答える 2

2

要素をイベント ハンドラーにバインドするためだけに、各関数が要素を反復処理する必要はほとんどないはずです。

$(document).ready(function() {
    $('.tooltip').hide();
    $('.youSave', '.text').on('mouseenter mouseleave', function() {
        $(this).next('.tooltip').fadeToggle('slow');
    });
});​

フィドル

残りは、ツールチップをボタンの上に配置することによる配置の問題であり、少しの CSS で修正できるはずです。

于 2012-10-31T19:55:25.483 に答える
1

最初は奇妙に書かれています。試す :

$('.text .youSave').mouseenter(function(){
   var item = $(this);
   var tooltip = $('.tooltip', item.parent()).fadeIn();
});

//the same way for mouseleave

ツールチップ display: none をデフォルトで指定します なぜ js で変更するのですか?

問題がわかりました。マウスがある場所にツールチップがフェードインし、そのイベント mouseleave が発生します。簡単に修正できます。ツールチップは .youSave 要素の子でなければなりません:

   <a class="youSave" href="#" onclick="return false"><span> You Save at Least $14,810<span>
<div class="tooltip">
                  <div class="inner">
                    <b>2012 Land Rover Range Rover Evoque</b>
                    <span>Your Price $19,330</span>
                    <p>The Web2Carz National Average is <b>$21,500</b></p>
                  </div>
</a>

そしてJS:

$('.text .youSave').mouseenter(function(){
   var item = $(this);
   var tooltip = $('.tooltip', item).fadeIn();
});
于 2012-10-31T20:02:59.460 に答える