【问题标题】:jQuery: how can I hide/show a small column specific button on table column hover?jQuery:如何在表格列悬停时隐藏/显示特定于小列的按钮?
【发布时间】:2010-11-08 19:26:54
【问题描述】:

我需要在每个表格列下方隐藏/显示(实际上是 slideDown/slideUp)一个“添加到购物车”按钮。

我的标记是一个非常基本的表格,按钮定位也没有造成任何问题,但我不知道如何将事件处理程序附加到表格的“悬停”事件列 这将显示该列内的按钮,然后当悬停在不同的列时,隐藏当前显示并显示当前悬停的下一个。

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

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

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

【问题讨论】:

    标签: jquery hover show-hide


    【解决方案1】:

    如果你想这样做,我建议使用浮动的、宽度定义的 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(); }
    );
    

    【讨论】:

    • 使用 div 可能更容易实现这一点
    • 另外,从可用性的角度来看,完全隐藏“添加到购物车”按钮可能不是一个好主意。如果他们从未将鼠标悬停在任何产品上,他们可能会认为您无法添加到购物车!
    • 感谢您的反馈,我正在考虑使用带有嵌套 ul 的浮动 div 而不是表格,但从语义上讲,它是一个数据表,所以它不应该在 table 元素中吗?跨度>
    • 另外:关于可用性方面的好电话。我认为必须修改这一点。
    • 它可能是table,但就 jQuery 而言,您尝试做的所有事情都会更加复杂。 r0m4n 的答案会起作用,但你可以用更少的代码和浮动 div 来实现同样的事情。为什么不在 div 悬停时突出显示它(背景颜色、不透明度等),而不是向上/向下滑动“添加到购物车”元素?你可以用 CSS 来完成这一切。
    【解决方案2】:

    如果你不想使用 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');   
    });
    

    【讨论】:

    • 您好,感谢您的代码。我试过了,虽然它比我以前的效果更好,但它有一个主要问题,当你不离开当前列而是在一个单元格之间上下移动时,每次悬停一个新单元格时,按钮 slideToggles...
    • 嗯...我无法复制您的问题,但可能是浏览器兼容性问题?你用什么浏览器测试?
    • 这是在 Mac 上的 Firefox 3.6.11 中,我可以通过基本上进入一列而不是不离开列而是在同一列中上下移动来重现它,每次我悬停一个新的@ 987654323@ 它会触发动画。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 2013-01-02
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多