将div移到另一个内部时,jQuery show / hide不起作用

时间:2011-07-29 15:48:48

标签: jquery asp.net

我一直在讨论这个问题,并且无法弄清楚为什么当我将它放在转发器中时jQuery不会显示/隐藏div。这是我试图展示/隐藏的div:

<div id="EmailForMoreInfo">Hey there!</div>

我用来显示/隐藏它的jQuery在这里:

if (event.srcElement && event.srcElement.hash == "#2") {
    $("#EmailForMoreInfo").show();
} else {
    $("#EmailForMoreInfo").hide();
}

'EmailForMoreInfo'的位置放在转发器中:

    <div class="panes">
    <asp:Repeater ID="rptProductsCategories" runat="server">
        <ItemTemplate>
            <div id="tabs-<%# DataBinder.Eval(Container.DataItem, "Key") %>">
            <div id="EmailForMoreInfo">Hey there!</div>
            <br style="clear:both;" />
            </div>
        </ItemTemplate>   
    </asp:Repeater>
    </div>

当'EmailForMoreInfo'放在转发器内时,上面的jQuery不起作用。将它移到转发器之外,一切正常。分析jQuery表明它在任何一种情况下都能找到合适的元素,但只有当它在转发器之外时才真正显示/隐藏它。否则,它总是显示。其他人遇到这种情况并有解决方法吗?

4 个答案:

答案 0 :(得分:1)

转发器让我觉得页面上还有其中一个。基本的第一天html说:你不能拥有相同ID的东西!

所以,你必须给它一个共同的类,但一个唯一的id。我们必须看到更多的代码来弄清楚究竟是什么方法可以解决这个问题。

当页面上有多个具有相同ID的内容时,jquery会非常困惑。

答案 1 :(得分:0)

我对ASP.NET并不熟悉,但听起来你正在使用给定的ID创建多个元素。元素ID必须是唯一的。请改用class属性。

答案 2 :(得分:0)

我认为它应该有效。但要找出为什么我会先尝试几件事......

1 - 尝试更改选择器以使用类而不是ID ...

$(".InfoClass").show();

<div id="EmailForMoreInfo" class="InfoClass">Hey there!</div>

2 - 检查Show和Hide方法是否被调用 - 在每个方法之前和之后添加警报...

if (event.srcElement && event.srcElement.hash == "#2") {
    alert("before show");
    $("#EmailForMoreInfo").show();
    alert("after show");
} else {
    alert("before hide");
    $("#EmailForMoreInfo").hide();
    alert("after hide");
}

从这里看看会发生什么

编辑:多个ID具有相同值的冲突(就像每个人都说的那样)是我最初的想法...但是,我确信我曾经使用过相同的ID值,所以不想只是说这是问题 - 更好地提供一些测试选项

答案 3 :(得分:0)

在转发器内部,DIV的ID不再是唯一的。因此,您必须使用CSS类或其他组合进行定位。你想用这个做什么?你想一次显示/隐藏所有内容吗?如果你给它一个名为“EmailForMoreInfo”的css类并执行:

if (event.srcElement && event.srcElement.hash == "#2") {
    $(".EmailForMoreInfo").show();
} else {
    $(".EmailForMoreInfo").hide();
}

这样可行,但如果您需要在行级别执行某些操作,请告知我们,我们可以提供更多帮助。