2010-11-08 56 views
0

我需要隐藏/显示(实际上是slideDown/slideUp)每个表格列下的“添加到购物车”按钮。jQuery:如何隐藏/显示表格列悬停上的小列特定按钮?

我的标记是一个非常基本的表,按钮定位也不会造成任何麻烦,但我不明白是如何将一个事件处理程序附加到表的'悬停'事件将显示该列内的按钮然后悬停不同的列时,隐藏当前显示并显示当前正在悬停的下一个列。

我已经创建了一个完整的设置jsFiddle,希望能够正确说明这个问题。

http://jsfiddle.net/jannis/naz22/

我将不胜感激,如果你能帮助我。

+0

接受答案? – hunter 2010-11-10 21:21:09

回答

2

如果你想这样做,我会建议使用浮动,宽度定义的div。你现在正在做的事情是,把一个“列”悬停在一起是不必要的复杂。如果他们是div,你可以简单地说$("div.column").hover(..)来获得你要去的效果。

<div class="container"> 
    <div class="features"> 
     <ul> 
      <li>Webmail</li> 
      ... 
     </ul> 
    </div> 
    <div class="product"> 
     <ul> 
      <li><img src="" /></li> 
      ... 
      <li class="addit"><a href="#">Add It</a></li> 
      </ul> 
    </div> 
    <div class="product"> 
     <ul> 
      <li><img src="" /></li> 
      ... 
      <li class="addit"><a href="#">Add It</a></li> 
      </ul> 
    </div> 
    <div class="product"> 
     <ul> 
      <li><img src="" /></li> 
      ... 
      <li class="addit"><a href="#">Add It</a></li> 
      </ul> 
      ... 
    </div> 
</div> 

然后一些简单的CSS

.product .addit { display:none; } 
.product:hover .addit { display:block; } 

.product:hover .addit { background: blue; } 

或jQuery的

$(".product").hover(
    function() { $(this).find(".addit").slideDown(); }, 
    function() { $(this).find(".addit").slideUp(); } 
); 
+0

您也可以使用div – hunter 2010-11-08 19:39:31

+1

更容易地实现这一点,从可用性的角度来看,完全隐藏ADD TO CART按钮可能不是一个好主意。如果他们从来不会诋毁任何产品,他们可能认为你不能加入购物车! – hunter 2010-11-08 19:40:32

+0

感谢您的反馈,我正在考虑使用浮动div的嵌套'ul'而不是表,但在语义上它是一个数据表,所以不应该在'table'元素? – Jannis 2010-11-09 19:42:07

0

,如果你不希望使用的div,尝试这个js来代替:

var table = $('table.comparison'), 

addBtns = table.find('.add-buttons a'); // the <a> is the button to be shown/hidden 

table.data('col',''); // attribute to keep track of currently hovered column 
var compare = "x"; 

$('td').hover(function() { 
    var idx = $(this).index(); 
    var idx2 = "col-"+ idx; 

    table.data('col', idx); // set data-col to current column 

    if($(this).attr("class")!= compare){ 
     $('.add-buttons').find('a').slideUp('fast'); 
     $('.add-buttons').find('.col-'+idx+' a').slideDown('fast'); 
     compare = idx2; 
    } 
}); 
$('table').hover(function() {},function(){ 
    $('.add-buttons').find('a').slideUp('fast'); 
}); 
+0

嗨,感谢您的代码。我试了一下,虽然它比我有更好的工作,但它有一个主要问题,当你不离开当前列,但每次移动一个新的单元格时,从一个单元格到另一个单元格上下移动按钮“slideToggles”... – Jannis 2010-11-09 19:44:42

+0

嗯...我无法复制你的问题,但也许浏览器兼容性问题?你测试什么浏览器? – r0m4n 2010-11-09 21:01:37

+0

这是在Mac上的Firefox 3.6.11,我可以基本上进入一个列,而不是离开列,但在同一列内上下移动,每当我悬停一个新的'td'它会触发动画。 – Jannis 2010-11-14 20:25:33