2011-03-12 83 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