1

我正在处理一个 asp.net 页面,并且我有一个使用内容页面(我的 web 控件)的母版页。在我的 Web 控件中,我有 4 个元素。当我更改picklisttype下拉

PickListType - 下拉 UserPickList - 不重要 组织 - 标签正文 - 标签地址 - 下拉

当我更改picklisttype dropdwon 时,我想隐藏正文和地址,反之亦然。

当我第一次更改它时,它可以工作,但是第二次,它说它第二次找不到 Body 和 Address 的 ID(我将它们的可见性设置为隐藏)。查看源代码时,这些元素似乎 1)在回发期间更改了它们的 Id,而 .ClientId 找不到它们或 2)它们就消失了。

我似乎无法弄清楚如何做到这一点。有任何想法吗?

function DropDownChange() {

            var picklist = document.getElementById("PickListTypeList");
            var usercontainer = document.getElementById("ctl00_ctl00_ctl00_PageContentPlaceHolder_PageContentPlaceHolder_paneDetails_ApplicerPickListContainer");
            var orgcontainer = document.getElementById("ctl00_ctl00_ctl00_PageContentPlaceHolder__C_OrganizationPickListContainer");
            var addresslabel = document.getElementById("LegalBodyAddressLabel");
            var addressbox = document.getElementById("ctl00_ctl00_ctl00_PageContentPlaceHolder_PageContentPlaceHolder_paneDetails_ApplicantsRadDock_C_ApplicantsControl_AddEditApplicantDock_C_AddApplicantDock_C_LegalBodyAddressComboBox");


            if(picklist.value.toLowerCase() === "sometext"){
                usercontainer.style.display = "none";
                orgcontainer.style.display = "inline";
                addresslabel.visibility = "visible";
                addressbox.style.display = "inline";
            }
            else{
                usercontainer.style.display = "inline";
                orgcontainer.style.display = "none";
                addresslabel.visibility = "hidden";
                addressbox.style.visiblity = "none";

            }


            }

这是来源:我使用 .ClientId 动态查找 id,但后来我将其更改为静态(每次都使用相同的 id),但我似乎仍然无法获取地址和标签。我通过进入控件(controlname.nameofelementID.ClientID)从父(主)页面中找到这些元素。

4

2 回答 2

1

2个想法/选项

  • 向要访问的控件添加一个类,然后使用它document.getElementsByClassName来检索它们。.NET 不会在回发后更改 html 标记上的类。

或者

  • 将它们包装在具有 id 的 div/span 中,然后document.getElementById是包装标签,然后访问其firstChild. 我建议不要runat="server"为这个包装器做
于 2013-06-20T20:59:20.237 回答
1

您有 2 种方法可以让它发挥作用:

  1. 使用类名(.net 框架不会处理这个)
  2. 在运行时生成 javascript id(使用 ClientId)。由于有回发,这是正确的做法。就像是:document.getElementById("<%=LegalBodyAddressLabel.ClientId%>");
于 2013-06-20T21:05:36.017 回答