2011-03-12 60 views
0

以及我有3个LinkBut​​ton的问题与JavaScript的getElementById

<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按钮必须unvisible

<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> 

但是当我点击编辑的LinkBut​​ton :var Edit = document.getElementById(“lnkEdit”);这里来空,不能收回控制的ID

什么问题?

回答

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快捷。

+0

是它的工作原理,但剂量不会影响到控制,所有这些按钮是可见:( – west 2011-03-12 17:46:11

2

ASP.NET将生成自己的HTML标识。

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

你确定它是关于他的路线:

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

而不是有关。如果要强制自己的自定义ID来生成,您可以使用“clientID的”属性指定的ID这一个:

Edit.visible = false; 

不知道哪个浏览器直接接收HTML元素上可见属性,而是尝试使用它代替:

Edit.style.visibility = 'hidden'; 

Edit.style.display = 'none'; 
+0

我是,但在这里无功编辑之炊空 – west 2011-03-12 17:47:08

1

如果控件容器内,容器的id将被前置到如果conbtrol创建一个客户端ID是唯一的。

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

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

ASP .NET生成的元素的ID时自动包括父元素的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") 
+0

是的,你是对的,我得到这样ctl00 $搜索Maincontent $ lnkEdit 你能解释我更清楚地了解这个功能呢? 做我通过上下文是什么参数? – west 2011-03-12 17:43:01

+0

您可以在其他元素传递到环境中,父元素,在这样你可以限制搜索到DOM的子树,例如:$$(“txtSymbol”,$$(“nearestPanel )),如果txtSymbol居住在nearestPanel内,则txtSymbol将是最近的面板的孩子。这是为了提供更多的信息,而不是在整个DOM树中进行搜索。 – omartell 2011-03-14 18:49:04

3

当您设置Visible在网络控制假的,这意味着它永远达不到浏览器。就浏览器所知,这些控件不存在。

因此,首先使用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 = ""; 
+0

我尝试过,但没有工作 oEdit我有这样的事情ctl00 $ $搜索Maincontent lnkEdit oSave - ctl00 $ $搜索Maincontent lnkSave oCancel - ctl00 $ $搜索Maincontent lnkCancel ID是不同的,不是吗? – west 2011-03-12 19:27:46

+0

@west抱歉,不知道你的意思。 'ctl00 $ MainContent $ lnkEdit'是名称,不是ID,它不相关。尝试添加'alert(oEdit);'你应该看到警告对话框与“[object]” - 请让我们更新。 – 2011-03-13 08:11:02