javascript getelementbyid的问题

时间:2011-03-12 16:29:05

标签: c# javascript asp.net asp.net-ajax

我有3个LinkBut​​ton

<asp:LinkButton ID="lnkEdit" runat="server" Text="Edit Record" OnClientClick='ControlVisible();'/>
<asp:LinkButton ID="lnkSave" runat="server" Text="Save" Visible="false" />
<asp:LinkButton ID="lnkCancel" runat="server" Text="Cancel" Visible="false"  />

当我点击lnkEdit按钮时lnkSave和lnkCancel按钮必须不可见

 <script language="javascript" type="text/javascript">

    function ControlVisible() {


        var Edit = document.getElementById("lnkEdit"); 
        var Save = document.getElementById("lnkSave");
        var Cancel = document.getElementById("lnkCancel");

        Edit.visible = false;
        Save.visible = true;
        Cancel.visible = true;

    }

</script>

但是当我要cLick编辑 LinkBut​​ton 时:var Edit = document.getElementById(“lnkEdit”); Null,无法检索Control的ID

问题是什么?

6 个答案:

答案 0 :(得分:5)

你必须使用另一种选择:

var Edit = document.getElementById("<%= lnkEdit.ClientID %>"); 
var Save = document.getElementById("<%= lnkSave.ClientID %>");
var Cancel = document.getElementById("<%= lnkCancel.ClientID %>");

您还可以使用ASP.NET AJAX $ get方法,它是document.getElementById的快捷方式。

答案 1 :(得分:3)

在网页控件上设置Visible false时,表示它永远不会到达浏览器。据浏览器所知,这些控件不存在。

首先使用CSS隐藏它们,而不是将Visible="false"更改为style="display: none;" - 效果将相同。

接下来,将代码更改为此代码,其他人也建议:

var oEdit = document.getElementById("<%=lnkEdit.ClientId%>"); 
var oSave = document.getElementById("<%=lnkSave.ClientId%>");
var oCancel = document.getElementById("<%=lnkCancel.ClientId%>");
oEdit.style.display = "";
oSave.style.display = "";
oCancel.style.display = "";

答案 2 :(得分:2)

ASP.NET将生成自己的HTML ID。如果要强制生成自己的自定义ID,可以使用“clientID”属性指定ID:

<asp:LinkButton ID="lnkEdit" clientID="lnkEdit" runat="server" Text="Edit Record" OnClientClick='ControlVisible();'/>

答案 3 :(得分:2)

在为元素生成ID时,ASP .NET会自动包含父元素的ID。生成的HTML将具有遵循以下格式的ID:ctl00$MainContent$txtSymbol。因此,如果您只使用最后一个ID,则默认DOM函数getElementById将找不到元素。

来源元素:

<asp:TextBox runat="server" ID="txtSymbol">

HTML生成:

<input type="text" id="ctl00_MainContent_txtSymbol" name="ctl00$MainContent$txtSymbol">

您可以创建一个帮助jQuery函数来处理这个问题。 Rick Strahl创建的下一个功能完成了这项工作:

function $$(id, context) {  
    var el = $("#" + id, context);  
    if (el.length < 1) {  
        el = $("[id$=_" + id + "]", context);
    }
    return el;  
}

您可以像这样使用它来找到您的元素:

$$("txtSymbol")

答案 4 :(得分:1)

你确定这是他的路线:

var Edit = document.getElementById("lnkEdit"); 

而不是这个:

Edit.visible = false;

不确定哪个浏览器直接在HTML元素上接受可见属性,但请尝试使用它:

Edit.style.visibility = 'hidden';

Edit.style.display = 'none';

答案 5 :(得分:1)

如果控件位于容器内,则容器的id将被添加到conbtrol的if之前,以创建唯一的客户端ID。

您可以使用ClientID属性查找生成的ID:

var Edit = document.getElementById("<%=lnkEdit.ClientId%>"); 
var Save = document.getElementById("<%=lnkSave.ClientId%>");
var Cancel = document.getElementById("<%=lnkCancel.ClientId%>");