2012-10-31 32 views
6

我有一种方法可以用来启动与其存在的<td>相关的工具提示。在IE,Chrome,Safari中一切都很好,但Firefox完全缺少每种方法,并且只启动DOM中的最后一个工具提示。jQuery .each()方法在Firefox中不起作用

什么给?

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"); 
     }); 
    }); 
});​ 
+1

真的吗? 2降价?解释为什么会很好。 JSFiddle提供了一个明确的问题? – robabby

+1

我看到它启动了工具提示 - 它只是因为tooltip获得焦点并导致它消失而触发。在Mac上使用FF。 –

+2

*“JSFiddle提供了一个明确的问题?”* http://meta.stackexchange.com/questions/149890/prevent-posts-with-links-to-jsfiddle-and-no-code如果JSFiddle发生故障或陷入困境(因为它是昨天和过去的其他时间),你提出的问题将不会被回答。 –

回答

1

开始写它很奇怪。尝试:

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

//the same way for mouseleave 

并提供工具提示显示:默认情况下没有为什么用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(); 
}); 
+0

很好的捕捉必要的HTML结构变化。这对我有用。谢谢! – robabby

2

真有几乎从不应该是需要的每个功能遍历元素只是将它们绑定到事件处理程序:

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

FIDDLE

剩下的就是放置工具提示放在按钮上方的位置问题,应该用一点CSS修复。

+0

这是一个非常精简的jQuery代码片段,但在FFox中​​的行为仍然相同。 – robabby

+0

它获得正确的工具提示,但它们几乎相同,我在这里更改了文本:http://jsfiddle.net/yus5b/5/以表明它确实得到正确的。另一个问题是糟糕的CSS布局。 – adeneo

+0

我想我明白了。 Firefox似乎有一段触摸时间来解释父母'​​'的'位置:亲戚'。将工具提示改为“位置:相对”而不是“绝对”,给了我每个'​​'中的工具提示,只要它破坏了设计,但实际上显示每个相对父元素都加载了单独的工具提示。 – robabby

相关问题