2009-07-13 8 views
11

내가 자바 스크립트를 사용하여이 오류가 실행 중에 나를 위해 나타납니다ASP.NET 컨트롤에 대한 JavaScript getElementById가 null을 반환합니까?

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

이 내 코드 :

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

답변

24

이 :

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

     }  

요구 사항이있을 수 있습니다 :

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

     }  

문제는 버튼이 ASP.Net 컨트롤이고 자신이 지정한 ID와 다른 클라이언트 ID를 생성한다는 것입니다. 코드를 넣어 <%=btnAlert.ClientID%> 생성 된 것을 브라우저에 게시합니다. 당신이 btnAlelrt라는 컨트롤이 더 이상 그 이름이 렌더링 된 페이지 ... 보면

+1

하나님은 내가 주위 – Triptych

1

당신은 "<퍼센트는 ="당신이 다음 컨트롤의 C#을 이름에 액세스 할 수 있습니다 추가하고 경우 작동해야합니다.

3

asp : Button에 부여한 ID는 ASP.Net에서 서버에 사용되는 ID입니다. 클라이언트 스크립트에서 사용하는 ID가 아닙니다.

당신은 사용해야합니다 : 당신이 생성 된 페이지의 소스를 보면 당신은 가능성이 버튼은 더 이상 ID "btnAlelrt"를 가지고 찾을 수 없습니다

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

. 그것은 "ctl001_btnAlert"또는 다른 생성 된 고유성 식별자와 같은 것을 가질 수 있습니다.

이것이 자바 스크립트가 찾지 못한 이유입니다.

태그로 검색하고 ID가 btnAlelrt로 끝나는 지 확인하기 위해 ID를 확인하거나 ID 주위에 DIV 또는 SPAN을 삽입해야합니다 (예 : runat = "server"가 없음). 그런 다음 ID로 해당 요소를 찾은 다음 그 요소 내부에있는 버튼을 가져올 수 있습니다.

가능한 경우 < % = btnAlelrt.ClientID %> 구문을 사용하여 자바 스크립트에 적절한 ID를 삽입 할 수 있습니다.

:이 순간에 당신을 위해 작성하는 코드 예제를 찾을 수 없습니다

1

((!) 참고는?이 btnAlert 있어야했다),하지만 난 당신이 가진 문제를 설명 할 수 있습니다.

ASP.NET은 개체/요소/단추에 페이지에 쓸 때 ID를 사용하지 않고 개체 ID를 클라이언트 ID로 지정합니다.

코드에서 Msgbox (btnAlelrt.clientID)를 수행하면 자바 스크립트에서 사용해야하는 개체 이름이 표시됩니다.

.NET 코드가 JavaScript에서 이러한 값을 상수가 아니므로 페이지에 쓰는 것이 좋습니다.

희망이 도움이됩니다.

제임스는

+0

좋은 접근 방식을 싫어 감사의 ClientIDMode = "정적"나는 자바 스크립트 사업부를 얻을 수 없었기 때문에 내 문제를 저장합니다. – ashubuntu

5

이를 사용할 수 있습니다

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

당신 요소에 대한 ClientIDMode 속성을 사용할 수 있습니다 ASP.NET 4.0에서 시작.

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

가 이런 식으로 렌더링됩니다 :

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

을 조정할 asp.net – davidlebr1

0

것은 = "정적 ClientIDMode를 사용해보십시오 당신이 Static로 설정하면 다음 ClientID 값은 ID 속성의 값으로 설정됩니다 ". 이것은 런타임에 버튼 id를 변경하지 않습니다.

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

다음 jquery 아래에서 버튼에 액세스 할 수 있습니다. 이게 도움이 되길 바란다.

var element = document.getElementById('SendMessageButton'); 
관련 문제