2009-07-13 22 views
11

uso de JavaScript y aparece este error para mí durante la ejecución:JavaScript getElementById para ASP.NET Control devuelve nulo?

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

esta mi código:

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

Respuesta

24

Este:

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

     }  

necesidades a ser la siguiente:

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

     }  

El problema es que su botón es un control ASP.Net y generará su propia identificación de cliente, que será diferente de la ID que especificó. poniendo el código <%=btnAlert.ClientID%> Se publicará el generado en el navegador.

+1

Dios no me gusta asp.net – Triptych

1

Si nos fijamos en la página representada el control de llamada btnAlelrt ya no tiene ese nombre ...

si se agrega "<% =" que luego son capaces de acceder al nombre de C# de un control, y Deberia trabajar.

3

La ID que otorga el botón asp: es la identificación que utiliza ASP.Net en el servidor. No es la identificación que usa el script del cliente.

Deberá utilizar:

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

Si ve la fuente en su página generada es probable que encuentre que el botón ya no tiene la ID "btnAlelrt". Puede tener algo como "ctl001_btnAlert", o algún otro identificador de exclusividad generado.

Es por eso que su javascript no lo está encontrando.

Deberá buscar por etiqueta, y verificar los ID para ver si terminan en btnAlelrt, o tendrá que colocar un DIV o SPAN a su alrededor con una ID que no se cambiará (es decir, no tiene runat = "servidor"). Luego puede encontrar ese elemento por su ID, y luego obtener el botón dentro de él.

Si puede, puede usar la sintaxis <% = btnAlelrt.ClientID%> para insertar la identificación adecuada en su javascript.

(Nota al margen: se supone que esto es btnAlert?)

1

no puedo encontrar un ejemplo de código para publicar para usted en este momento, pero puede explicar el problema que usted tenga.

ASP.NET no utiliza la ID que le da a un objeto/elemento/botón cuando lo escribe en la página, sino que le da al objeto una ID de cliente.

Si hace Msgbox (btnAlelrt.clientID) en su código, verá el nombre del objeto que su javascript debería usar.

Es mejor tener el código .NET escribiendo estos valores, en javascript, en la página, ya que no son una constante.

Espero que esto ayude.

James

+0

buen enfoque para ajustar alrededor – ashubuntu

5

Se puede utilizar esta:

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

A partir de ASP.NET 4.0 se puede utilizar ClientIDMode propiedad para usted elemento. Y si se establece en Static entonces el valor ClientID se establece en el valor de la propiedad ID:

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

será mostrado como algo parecido a esto:

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

Gracias, el ClientIDMode = "estático" salvar mi problema porque no era capaz de conseguir el div en javascript. – davidlebr1

0

intente utilizar ClientIDMode = "Static ". esto no cambiará la identificación del botón en el tiempo de ejecución.

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

continuación, puede utilizar debajo de jQuery para acceder a su botón. Espero que esto ayude.

var element = document.getElementById('SendMessageButton'); 
Cuestiones relacionadas