确定asp:Placeholder是否可见Jquery

时间:2011-04-14 14:46:12

标签: javascript jquery asp.net html

我有一个程序包含两个asp:Placeholderrunat = "server"的程序。一次只能看到一个。我想通过javasacript和jquery确定哪个是。我尝试了一些命令,但没有一个有效。到目前为止,我已经尝试过(这些都在if语句中:

if ($'#showClosest').visible)
if ($'#showClosest').style.visibility)
if ($'#showClosest').css.visible)
if ($'#showClosest').css.visibility)

即使占位符可见,它们也没有工作/返回true。

有没有办法确定placeholdervisible

我需要通过占位符来做到这一点。我从pageload获得的信息将决定什么是可见的,什么不是。

修改

以下是占位符:

<asp:PlaceHolder ID = "showClosest" runat = "server">
<asp:PlaceHolder ID = "showSelectedInformation" runat = "server">

以下是我设置可见性(页面加载)的方法:

if (Request.Params.AllKeys.Contains(src.Config.Title))
{
     //Code

     //Make correct divs visible
     showSelectedInformation.Visible = true;
     showClosest.Visible = false;

 }else{
     //Make sure correct divs are visible
     showSelectedInformation.Visible = false;
     showClosest.Visible = true;
 }

6 个答案:

答案 0 :(得分:2)

回答你的问题给@Mr。失望,是的,如果你在占位符中添加一个div,你可以检查它。当占位符可见时,它只会出现在页面标记中。

<asp:PlaceHolder runat="server" ID="myPlaceHolder">
    <div id="foo"></div>
</asp:PlaceHolder>

然后在您的JavaScript中,您只需检查该元素是否存在。

var placeholderVisible = ($('#foo').length > 0);

答案 1 :(得分:1)

与某些答案相比,答案可能非常简单。

从这里开始:

<asp:PlaceHolder ID = "showClosest" runat = "server">
<asp:PlaceHolder ID = "showSelectedInformation" runat = "server">

到此:

<div id="showClosest" runat="server">
<div id="showSelectedInformation" runat="server">

现在您已经拥有的javascript和C#无需修改即可使用,但请注意,从设置为runat="server"的控件引用javascript中的ID需要(仅限.NET 4.0)static ID rendering mode

哦,确保你的jQuery看起来像这样:

if ($'#showClosest').is(':visible'))

答案 2 :(得分:0)

好的 - Javascript和jQuery不能直接使用ASP.NET PlaceHolder控件。这是因为这样的控件只是服务器端,并且不会直接呈现给客户端,而只是呈现在客户端内部或覆盖它,所以:

<asp:PlaceHolder runat="server" ID="myPlaceHolder">
    ???????????
</asp:PlaceHolder>

输出为:

"



   ???????????


"

空间,等等。因此,您在jQuery中使用的标识符($'#placeHolder')在此处没有任何意义,因为它没有标识任何内容。所以,简短的回答是这样的:

使用jQuery无法直接确定PlaceHolder

您可能希望对@ Tom的回答感兴趣,他似乎提供了一个脚本/客户端解决方案,尽管远离以j开头的语言。 ;)

答案 3 :(得分:0)

最简单的方法是在页面生成上执行此操作。在您的ASPX页面上有Javascript:

<head>
    <script type="text/javascript">
        var IsVisible = <%=PlaceHolderVisibility%>;
    </script>
</head>

然后在您处理完页面后的代码中,执行:

public string PlaceHolderVisibility;

... snip ....

if(SomePlaceholder.Visible)
    PlaceHolderVisibility= "true";
else
    PlaceHolderVisibility= "false";

无论如何都是这样的。请注意,Javascript和ASP / c#进程在不同情况下的响应略有不同,因此请注意这一点。

然后,当您想知道面板是否可见时,您可以简单地调用IsVisible变量。

使用纯Jquery并且没有上述解决方案,因为PlaceHolder实际上没有向DOM呈现任何内容,所以会很难。你需要一个在其中呈现的元素作为一个标志,但你必须处理它不存在/无法找到的实例,以及它何时。可能难以管理。

答案 4 :(得分:0)

你试过这个吗?

if (jQuery('#showClosest').is(':visible')) {

答案 5 :(得分:0)

继@Tom Gullen严厉审核的答案之后,如果您的要求是确定页面上的哪个占位符可见并且一次只能看到一个占位符,那么您可以使用属性返回ID可见的:

public string VisiblePlaceHolderID
{
    get
    {
        return this.Controls.OfType<PlaceHolder>().FirstOrDefault(p => p.Visible == true).ClientID;
    }
}

这将返回包含Visible="true"的页面上第一个占位符的ID,然后您可以直接在JavaScript中使用,如下所示:

alert("<%= this.VisiblePlaceHolderID %>");