2009-03-23 5 views
7

Wygląda na to, że wszyscy to robią (w postach kodowych itp.) ... ale nie wiem jak :(Jak mogę uzyskać dostęp do elementu ASP runat = "server" za pomocą javascript?

za każdym razem, gdy próbuję manipulować elementem asp przy użyciu javascript, otrzymuję "element jest pusty" lub " dokument jest niezdefiniowana”błąd itp .....

javascript zazwyczaj działa dobrze, ale ... tylko po dodaniu runat =«server atrybut»robi element wydaje się niewidoczne dla mojego javascript.

dowolny sugestie są mile widziane

Dzięki, Andrew

Odpowiedz

23

To, co prawdopodobnie się dzieje, polega na tym, że element/kontrolka znajduje się w obrębie jednego lub więcej kontrolek ASP.NET, które działają jak nazwy kontenerów (strona wzorcowa, szablon, kreator itp.) I to powoduje zmianę identyfikatora.

Możesz użyć "wyświetlenia źródła" w swojej przeglądarce, aby potwierdzić, że dzieje się to w renderowanym kodzie HTML.

Jeśli twój JavaScript jest na stronie ASPX, najprostszym sposobem tymczasowego obejścia tego jest use the element's ClientID property. Na przykład, jeśli miał sterowania o nazwie TextBox1 że chciał odwoływać poprzez JS:

var textbox = document.getElementById('<%= TextBox1.ClientID %>'); 
+1

wielki odpowiedź ... ale musiał oddać go osobie, który odpowiedział pierwszy ... dzięki za wyjaśnienie chociaż! – Andrew

+3

@Andrew - jeśli jest to lepsza odpowiedź, powinieneś ją zaakceptować jako taką. Na jakość SO jest przed prędkością. –

+0

ya, tak też myślałem ... zrobię. – Andrew

2

Jeśli masz tekstowego:

<asp:TextBox id="txtText" runat="server" /> 

można użyć:

var textBox=document.getElementById('<%=txtText.ClientID %>'); 

Wszelkie WebControl odsłania tę samą właściwość ClientID.

2

Making element runat="server" zmienia identyfikator klienta po stronie tego elementu w oparciu o co ASP.NET nazewnictwa pojemników To wnętrze. Więc jeśli używasz document.getElementById do manipulowania elementem, musisz przekazać mu nowy identyfikator wygenerowany przez .NET. Spójrz na własność ClientId aby ta wygenerowany identyfikator ... można go używać w inline JavaScript tak:

var element = document.getElementById('<%=myControl.ClientID%>'); 
1

Wszystko jednak pytanie zostało odebrane, myślałem, że po prostu pisać jakieś dalsze informacje ...

Rick Strahl wykonał dość interesującą pracę nad tym problemem.

http://www.west-wind.com/WebLog/posts/252178.aspx

szczęście kiedy ASP .NET 4.0 przybywa, pozwoli na określenie exacly co ID Klienta zostanie!

http://www.codeproject.com/KB/aspnet/ASP_NET4_0ClientIDFeature.aspx

+0

+1: dla miłego rozwiązania Ricka i nowej funkcji .NET 4. Rozwiązuje problem związany z plikiem JS w pliku zewnętrznym (gdzie nie można użyć czegoś takiego jak '<% = txtText.ClientID%>') –

Powiązane problemy