2009-07-13 9 views
11

Io uso JavaScript e appare questo errore per me durante l'esecuzione:JavaScript getElementById per il controllo ASP.NET restituisce null?

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

questo il mio codice:

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

risposta

24

questo:

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

     }  

ha bisogno di essere questo:

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

     }  

Il problema è che il tuo pulsante è un controllo ASP.Net e genererà il proprio ID client, che sarà diverso dall'ID specificato. inserendo il codice <%=btnAlert.ClientID%> pubblicherà quello generato nel browser.

+1

Dio odio asp.net – Triptych

1

Se si guarda la pagina visualizzata il controllo denominato btnAlelrt non ha più quel nome ...

se si aggiunge "<% =" si è poi in grado di accedere al nome C# di un controllo, ed è dovrebbe funzionare.

3

L'ID che si assegna all'ASP: Button è l'ID utilizzato sul server da ASP.Net. Non è l'ID che viene utilizzato dallo script client.

Si dovrebbe usare:

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

Se si visualizza sorgente sulla tua pagina generata probabilmente troverete che il pulsante non ha più l'ID "btnAlelrt". Potrebbe avere qualcosa come "ctl001_btnAlert" o qualche altro identificatore di unicità generato.

Questo è il motivo per cui il tuo javascript non lo trova.

Avrai bisogno di cercare per tag e controllare gli ID per vedere se terminano in btnAlelrt, o dovrai posizionare un DIV o SPAN attorno ad esso con un ID che non verrà modificato (es. non ha runat = "server"). È quindi possibile trovare quell'elemento tramite il suo ID e quindi ottenere il pulsante al suo interno.

Se è possibile, è possibile utilizzare la sintassi <% = btnAlelrt.ClientID%> per inserire l'ID corretto nel javascript.

(nota a margine: è stato questo doveva essere btnAlert?)

1

Non riesco a trovare un esempio di codice per pubblicare per voi in questo momento, ma posso spiegare il problema vostro avere.

ASP.NET non utilizza l'ID che si fornisce a un oggetto/elemento/pulsante quando lo scrive sulla pagina, ma fornisce all'oggetto un ID client.

Se si esegue Msgbox (btnAlelrt.clientID) nel codice, verrà visualizzato il nome dell'oggetto che deve essere utilizzato da javascript.

È meglio avere il codice .NET scrivere questi valori, in javascript, sulla pagina, in quanto non sono una costante.

Spero che questo aiuti.

James

+0

buon approccio per ottimizzare intorno – ashubuntu

5

È possibile utilizzare questo:

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

A partire da ASP.NET 4.0 è possibile utilizzare ClientIDMode proprietà per voi elemento. E se si imposta in Static allora il valore ClientID verrà impostato il valore della proprietà ID:

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

verrà tradotto in qualcosa di simile a questo:

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

Grazie, il ClientIDMode = "Static" salvare il mio problema perché non ero in grado di ottenere il div in javascript. – davidlebr1

0

provare a utilizzare ClientIDMode = "Static ". questo non cambierà l'id del pulsante in fase di runtime.

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

Quindi è possibile utilizzare sotto jquery per accedere al pulsante. Spero che aiuti.

var element = document.getElementById('SendMessageButton'); 
Problemi correlati