CSS / Javascript鼠标悬停弹出框

时间:2013-03-17 06:00:03

标签: javascript html css mouseover

我有一个带有javascript / css内容框的表格单元格,在鼠标悬停时弹出。

页面上有20个单元格。一切正常,因为当您将鼠标悬停在产品链接上时,您会看到内容框。但是,我想在用户可以选择的内容框中放置一个LINK。因此,弹出框必须保持足够长的时间,以便用户鼠标悬停以单击链接。

真的,我希望OnMouseOver保持打开状态,直到一两秒钟和/或用户OnMouseOver的另一个单元格为止。

我遇到的问题是弹出框没有保持打开状态(由于OnMouseOut)点击链接。如果我关闭OnMouseOut(我尝试过),那么所有弹出框都会保持打开状态,所以这也不能完成。

我的CSS看起来像这样:

<style type="text/css" title="">
    .NameHighlights         {position:relative; }
    .NameHighlights div     {display: none;}
    .NameHighlightsHover    {position:relative;}
    .NameHighlightsHover div {display:block;position:absolute;width: 15em;top:1.3em;*top:20px;left:70px;z-index:1000;}
</style>

和html:

<td>
    <span class="NameHighlights" onMouseOver="javascript:this.className='NameHighlightsHover'" onMouseOut="javascript:this.className='NameHighlights'">
    <a href="product link is here">Product 1</a>
           <div>
            # of Votes:  123<br>
            % Liked<br>
            <a href="product review link>See User reviews</a>
            </div>
    </span>
</td>

那么,如何让弹出框保持打开足够长的时间以点击链接,如果另一个内容框被激活,它还会消失?

提前致谢。

2 个答案:

答案 0 :(得分:3)

您必须为此任务改进HTML标记,需要摆脱内联事件处理程序:

<span class="NameHighlights">
    <a href="product link is here">Product 1</a>
    <div>
        # of Votes:  123<br>
        % Liked<br>
        <a href="product review link">See User reviews</a>
    </div>
</span>

然后,您必须将事件绑定到所有.NameHighlights跨度:

var span = document.querySelectorAll('.NameHighlights');
for (var i = span.length; i--;) {
    (function () {
        var t;
        span[i].onmouseover = function () {
            hideAll();
            clearTimeout(t);
            this.className = 'NameHighlightsHover';
        };
        span[i].onmouseout = function () {
            var self = this;
            t = setTimeout(function () {
                self.className = 'NameHighlights';
            }, 300);
        };
    })();
}

http://jsfiddle.net/3wyHJ/

所以我的想法是使用setTimeout方法。

Notes :我使用了IE7不支持的querySelectorAll,如果你需要支持它,那么你可以使用getElementsByClassName方法的任何实现。

答案 1 :(得分:0)

如果有人正在寻找接受答案的jQuery版本:

var t;
$(function(){
            $('span.NameHighlights').mouseover(

                    function(e){
                        hideAll();
                        clearTimeout(t);
                        $(this).attr('class', 'NameHighlightsHover');

                    }
            ).mouseout(

                    function(e){

                        t = setTimeout(function() {
                        //$(this).attr('class', 'NameHighlights');
                        hideAll();
                        }, 300);

                    }
            );
        });

function hideAll() {
    $('span.NameHighlightsHover').each(function(index) {
            console.log('insde hideAll');
                $(this).attr('class', 'NameHighlights');
            })
};

jsFiddle