循环中jquery .hover函数的动态弹出窗口

时间:2013-09-02 07:28:54

标签: javascript jquery html spring

我的表中有一个for-each循环,结构如下:

<c:set var="count" value="0" />
<c:forEach items="${message }" var="element">
    <div id="env">
        Details - <b>${fn:toUpperCase(element.key)}</b>
    </div>
    <table cellpadding="0" cellspacing="0" border="0"
        class="display dataTable" id="example">
        <thead>
            <tr>
                <td>Env</td>
                <td align="center">URL</td>
                <td>Details</td>
            </tr>
        </thead>
        <tbody>
            <c:forEach items="${element.value}" var="details"  varStatus="loop">
            <c:set var="count" value="${count + 1}"/>
                <tr>
                    <td>${details.env}</td>
                    <td><a href="${details.url}" target="_blank">${details.url}</a></td>                        
                    <td><a href="#" class="trigger">Details</a></td>
                    <!-- HIDDEN / POP-UP DIV -->
                    <div class="pop-up">
                        <h3>Pop-up div Successfully Displayed</h3>
                        <p>
                          ${details.env}
                        </p>
                    </div>
                    </tr>
            </c:forEach>
        </tbody>
    </table>
</c:forEach>

当用户使用jquery悬停在 元素上时,我试图为循环的每个元素显示一个弹出窗口。我的jquery代码是:

$(function() {
    var moveLeft = -200;
    var moveDown = 10;
    $('a.trigger').hover(function(e) {
      $('div.pop-up').show();
    }, function() {
      $('div.pop-up').hide();
    });

    $('a.trigger').mousemove(function(e) {
      $('div.pop-up').css('top', e.pageY + moveDown).css('left', e.pageX + moveLeft);
    });

  });

我的问题是,它只显示循环的最后一个元素。如何在类'触发器'的循环中显示每个元素?

1 个答案:

答案 0 :(得分:0)

这看起来很可疑:

 $('a.trigger').hover(function(e) {
      $('div.pop-up').show();
    }, function() {
      $('div.pop-up').hide();
    });

彼此相邻的两个功能看起来很可疑。你的意思是做什么:

 $(function(){
    $('a.trigger').hover(function() {
        $('div.pop-up').hide();
        $(this).parent().next().show();
    });
    $('a.trigger').mousemove(function() {
        $('div.pop-up').hide();
    });
  });

在此示例中 - 隐藏所有弹出窗口并在当前元素后显示该弹出窗口。我的建议的缺点是你需要保持结构。例如,如果您为组使用唯一的ID /类,则会更加一致。

<强>更新

我看到两个可能的问题。

1弹出式div不在内部元素中,可能会被浏览器删除。请参阅下面的小提琴,第一个div没有td,如果你检查html源 - 它根本就不存在。

2悬停/鼠标移动似乎也是两栖的,我用鼠标悬停 mouseleave 更简单地重写了它(注意我为弹出div添加了额外的td父级) :

$(function () {
    $('a.trigger').mouseover(function () {
        $(this).parent().next().children().show();
    });
    $('a.trigger').mouseleave(function () {
        $('div.pop-up').hide();
    });
});

以下是一个工作示例:http://jsfiddle.net/n6wh2/1/

希望这有帮助