2009-07-13 17 views
11

używam JavaScript i ten błąd pojawia się dla mnie w trakcie realizacji:JavaScript getElementById dla ASP.NET Control zwraca null?

Microsoft JScript runtime error: 'document.getElementById(...)' is null or not an object 

to mój kod:

<asp:Content ID="content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> 
<script language="javascript" type="text/javascript"> 
    function ConfirmTransfere() { 
     if (confirm("Syatem not allow negative inventory, would you like to continue ?") == true) { 
      document.getElementById("btnAlelrt").click(); 

     }  
} 
</script> 
<asp:ScriptManager ID="ScriptManager1" runat="server"> 
    </asp:ScriptManager> 
    <asp:UpdatePanel ID="uxContainer" runat="server"> 
    <ContentTemplate> 
<table> 
<tr> 
     <td> 
     <asp:Button ID="uxTransfer" runat="server" Text="Transfer" OnClick="uxTransfer_Click" /> 
     <asp:Button ID="btnAlelrt" runat="server" Text="GetDetails" OnClick="btnAlelrt_Click" />  
     </td> 
     </tr> 
</table> 
    </ContentTemplate> 
<Triggers> 
    <asp:PostBackTrigger ControlID="uxTransfer" />  
    </Triggers> 
    </asp:UpdatePanel> 

</asp:Content> 

Odpowiedz

24

to:

function ConfirmTransfere() { 
     if (confirm("Syatem not allow negative inventory, would you like to continue ?") == true) { 
      document.getElementById("btnAlelrt").click(); 

     }  

musi być to:

function ConfirmTransfere() { 
     if (confirm("Syatem not allow negative inventory, would you like to continue ?") == true) { 
      document.getElementById('<%=btnAlert.ClientID%>').click(); 

     }  

Problem polega na tym, że przycisk jest formantem ASP.Net i wygeneruje własny identyfikator klienta, który będzie inny niż podany identyfikator. wprowadzenie kodu <%=btnAlert.ClientID%> Umieszcza wygenerowany w przeglądarce.

+1

Bóg Nienawidzę asp.net – Triptych

1

Jeśli spojrzeć na stronie świadczonych kontrola nazywa btnAlelrt nie ma już tej nazwy ...

Jeśli dodać „<% =” jesteś wtedy w stanie uzyskać dostęp do nazwy C# z kontrolą, i to powinno działać.

3

Identyfikator podany przez asp: Button jest identyfikatorem używanym na serwerze przez ASP.Net. To nie identyfikator jest używany przez skrypt klienta.

Należy użyć:

document.getElementById("<%= btnAlelrt.ClientID %>").click(); 
3

Jeżeli zobaczyć źródło na generowanej stronie będzie prawdopodobnie okaże się, że przycisk nie ma już identyfikator „btnAlelrt”. Może mieć coś takiego jak "ctl001_btnAlert" lub inny wygenerowany identyfikator unikalności.

Dlatego właśnie javascript go nie znajduje.

Musisz albo szukać według tagu, i sprawdzić identyfikatory, aby zobaczyć, czy kończą się one w btnAlelrt, albo będziesz musiał umieścić DIV lub SPAN wokół niego z identyfikatorem, który nie zostanie zmieniony (np. nie ma runat = "server"). Możesz następnie znaleźć ten element według jego identyfikatora, a następnie uzyskać przycisk wewnątrz niego.

Jeśli możesz, możesz użyć składni <% = btnAlelrt.ClientID%>, aby wstawić prawidłowy identyfikator w javascript.

(marginesie: czy to ma być btnAlert?)

1

nie mogę znaleźć przykładowy kod, aby opublikować dla Ciebie w tej chwili, ale mogę wyjaśnić problem od posiadania.

Program ASP.NET nie używa identyfikatora, który podajesz obiekt/element/przycisk podczas zapisywania go na stronie, zamiast tego nadaje mu identyfikator klienta.

Jeśli wykonasz Msgbox (btnAlelrt.clientID) w swoim kodzie, zobaczysz nazwę obiektu, której powinien używać javascript.

Lepiej, aby kod .NET zapisywał te wartości w javascript na stronie, ponieważ nie są one stałe.

Mam nadzieję, że to pomoże.

James

+0

dobre podejście do dostrojenia wokół – ashubuntu

5

Można to wykorzystać:

document.getElementById('<%= btnAlelrt.ClientID %>').click() 

Począwszy od ASP.NET 4.0 można użyć ClientIDMode nieruchomość za Ciebie elementu. A jeśli go ustawić w Static wówczas wartość ClientID zostaną ustawione na wartości właściwości ID:

<asp:Label ID="Label1" runat="server" ClientIDMode="Static" /> 

będą renderowane jako coś takiego:

<span id="Label1" name="ctl00$MasterPageBody$ctl00$Label1" /> 
+0

Dziękujemy, ClientIDMode = „Static” zapisz mój problem, bo nie był w stanie uzyskać div w JavaScript. – davidlebr1

0

spróbuj ClientIDMode = "Static ". to nie zmieni id przycisku w czasie wykonywania.

<asp:Button ID="SendMessageButton" ClientIDMode="Static" runat="server" Text="Send Message" CssClass="buttonPositive" 
      CausesValidation="True" OnClientClick="validate();" OnClick="SendMessageButton_Click" /> 

Następnie można użyć pod jquery, aby uzyskać dostęp do przycisku. Mam nadzieję, że to pomoże.

var element = document.getElementById('SendMessageButton'); 
Powiązane problemy