2009-07-13 10 views
11

Ich benutze JavaScript und dieser Fehler erscheint für mich während der Ausführung:JavaScript getElementById für ASP.NET-Steuerelement gibt null zurück?

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

dies mein Code:

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

Antwort

24

Dieses:

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

     }  

Bedürfnisse dies sein:

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

     }  

Das Problem besteht darin, dass Ihre Schaltfläche ein ASP.Net-Steuerelement ist und eine eigene Client-ID generiert, die sich von der von Ihnen angegebenen ID unterscheidet. Putting in the code <%=btnAlert.ClientID%> Wird die generierte aus dem Browser veröffentlichen.

+1

Gott hasse ich asp.net – Triptych

1

Wenn Sie die gerenderte Seite sehen Sie die Kontrolle genannt btnAlelrt nicht mehr diesen Namen hat ...

Wenn Sie hinzufügen „<% =“ Sie sind dann in der Lage, die C# Name einer Steuerung zugreifen zu können, und es sollte arbeiten.

3

Die ID, die Sie dem asp: Button geben, ist die ID, die auf dem Server von ASP.Net verwendet wird. Es ist nicht die ID, die vom Clientskript verwendet wird.

sollten Sie verwenden:

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

Wenn Sie Quelle auf generierte Seite sehen Sie wahrscheinlich feststellen, dass die Taste nicht mehr die ID „btnAlelrt“ hat. Es könnte etwas wie "ctl001_btnAlert" oder eine andere generierte Eindeutigkeitskennung haben.

Dies ist, warum Ihr Javascript es nicht findet.

Sie müssen entweder nach dem Tag suchen und die IDs prüfen, um zu sehen, ob sie in btnAlelrt enden, oder Sie müssen einen DIV oder SPAN mit einer ID einfügen, die nicht geändert wird (d hat nicht runat = "server"). Sie können dieses Element dann anhand seiner ID finden und dann die Schaltfläche darin abrufen.

Wenn Sie können, können Sie die <% = btnAlert.ClientID%> Syntax verwenden, um die richtige ID in Ihr Javascript einzufügen.

(Nebenbei bemerkt: sollte diese btnAlert sein?)

1

ich nicht ein Codebeispiel zu schreiben für Sie in diesem Moment finden kann, aber ich kann das Problem Sie mit erklären.

ASP.NET verwendet nicht die ID, die Sie einem Objekt/Element/Button beim Schreiben auf die Seite geben, sondern gibt dem Objekt eine Client-ID.

Wenn Sie in Ihrem Code Msgbox (btnAlert.clientID) eingeben, dann sehen Sie den Objektnamen, den Ihr Javascript verwenden soll.

Es ist besser, wenn der .NET-Code diese Werte in Javascript auf die Seite schreibt, da sie keine Konstante sind.

Hoffe, das hilft.

James

+0

guten Ansatz zu optimieren um – ashubuntu

5

Sie können diese verwenden:

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

ab ASP.NET 4.0 Sie ClientIDMode Immobilie für Sie Element verwenden können. Und wenn Sie es in Static dann der ClientID Wert wird auf den Wert der ID-Eigenschaft festgelegt werden:

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

wird als so etwas wie dies gemacht werden:

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

Danke, die ClientIDMode = „Static“ mein Problem sparen, weil ich nicht in der Lage war, die div in Javascript zu bekommen. – davidlebr1

0

versuchen ClientIDMode mit = "Static ". Dies ändert nicht die Tasten-ID zur Laufzeit.

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

Dann können Sie unter jquery verwenden, um auf Ihre Schaltfläche zuzugreifen. Ich hoffe das hilft.

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