jquery 检查ASP标签是否在不同页面可见?

ef1yzkbh  于 2023-02-03  发布在  jQuery
关注(0)|答案(1)|浏览(129)

目前我正在编写的代码很混乱,目前我有一个aspx页面,其中包含一些javascript,并为ascx页面(不是当前的aspx)上的各种asp:button设置了一个工具提示,它看起来如下所示:

function setTooltips() {
$("[id*='btnSave']").mousemove(function (ev) { ButtonToolTip(ev, this, "Click to save"); });
$("[id*='btnClear']").mousemove(function (ev) { ButtonToolTip(ev, this, "Clear fields"); });
// more button tooltips set.
}

在ascx页面中,我也有一个asp:label。我正在创建一个javascript方法来根据这个标签的可见性显示警报。我在查找控件及其可见性时遇到了麻烦。
下面是asp标签代码的样子:

<asp:UpdatePanel runat="server" ID="upnl_alert" UpdateMode="Always">
  <ContentTemplate>
    <asp:Label ID="lbl_alert" runat="server" Text="There are several issues found.<br /><br />" Visible="false" />
  </ContentTemplate>
</asp:UpdatePanel>

有没有办法检查asp标签的可见性,以便我可以实现刚才为警报编写的函数?
我试过:

if (document.getElementById('lbl_alert').style.visibility == "visible")

但我得到DOM异常-执行失败。
先谢谢你的帮助。

ctehm74n

ctehm74n1#

我有一个aspx页面,它有一些javascript并为ascx页面(不是当前的aspx)上的各种asp:button设置了一个工具提示。
嗯,不完全是!!!这里的背景很重要。
构建任何"用户"控件并将其放入任何页面?
标记,控件,JavaScript和ascx控件所拥有的其他东西?它被放置在您现有的aspx页面中。所以,不,控件不在其他页面中。
最好声明您有一个用户控件放到了一个现有的页面中,因此我想选择/使用/享受/隐藏/显示或对用户控件的一些按钮执行任何操作。
像所有的页面一样,大多数控件通常会接收当前页面类或命名空间作为前缀。请记住,如果您将用户控件拖到现有页面中2或4次会发生什么?那么按钮的"id"会变成什么?我的意思是,按钮不能具有相同的id,但多次放入用户控件是完全合法的,而且每次,它将把该标记拉入当前页面。
所以,假设一个超级简单的用户控件(ascx)是这样的:

此UC的代码隐藏(按钮点击)

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

End Sub

Protected Sub Button1_Click(sender As Object, e As EventArgs)

    Me.Label1.Text =
    $"control id = {Me.ClientID} <br/>
    Button ID = {Button1.ClientID} <br/>
    LableID = {Label1.ClientID}"

End Sub

好了,现在让我们创建一个新的空白页,并在上面拖放。
我们现在有了这个:

<uc1:UserButton runat="server" id="UserButton" />
<br />
<br />
<uc1:UserButton runat="server" id="UserButton1" />
<br />
<asp:Button ID="Button1" runat="server" Text="JavaScript - get Label 1"
    OnClientClick="gettest();return false"               
    />

<script>
    function gettest() {

        // var sLbl = '<%=UserButton.ClientID + "_Label1" %>'
        var sLbl = 'UserButton_Label1'

        var lbl1 = document.getElementById(sLbl)

        sResult = "Value of label1 in control is \n" + lbl1.innerText

        alert(sResult)

    }

</script>

所以,自从我去过加州大学两次?
那么标签和按钮是怎么分开的呢?
简单:
每个控件"内部"的控件都以您给用户控件的"id"为前缀,然后是"_",然后是内部的控件。
因此,请注意关闭我使用的js代码:

// var sLbl = '<%=UserButton.ClientID + "_Label1" %>'
var sLbl = 'UserButton_Label1'

var lbl1 = document.getElementById(sLbl)

sResult = "Value of label1 in control is \n" + lbl1.innerText

alert(sResult)

所以,当我运行上面的代码时,我会得到:

因此,您需要在ascx页中所需的控件前面加上CURRENT页中使用的控件名的"id"!
这就是为什么我在这里说上下文很重要。ASCX页面并不重要,重要的是当前页面上使用的"UC"控件的名称,因为当这样的控件被拖放到现有页面中时,该UC控件的控件将以用户控件的"id"作为前缀。
所以,需要说明的是:
控件不在另一个页面中,这实际上只是设计时的一个考虑和视图。
在运行时,这些ascx控件会被拉入、注入和呈现在CURRENT页面中,因此,您可以/必须在ascx页面中的控件前面加上UC控件的"id",该UC控件在将控件"拖"到您喜欢的任何网页时使用。
用户控件非常棒,因为它们表示可重用的控件,但最终,此类控件呈现在当前页中。

相关问题