2017-02-04 5 views
0

이 문제와 관련된 다른 모든 질문/해결책을 살펴본 결과 해결책을 찾을 수 없습니다.document.getElementById()는 외부 JS 파일에서 호출 할 때 NULL을 반환합니다.

버튼이있는 기본 aspx 페이지가 있습니다. OnClick은 JS 함수를 호출합니다. Javascript 함수는 작동하는 document.getElementById()를 호출합니다. 그런 다음 외부 JA 파일에있는 하위 함수를 호출하고 동일한 호출이 실패합니다. 왜?

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="jstest.aspx.cs" Inherits="jstest" %> 
<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
    <asp:CheckBox runat="server" ID="RunAtStartup" OnClick="function1();" text="Click Me" /> 
    </div> 
    </form> 

    <script> 
    function function1() 
    { 
     if (document.getElementById("<%= RunAtStartup.ClientID %>") == null) 
      alert('function1 null'); 
     else 
      alert('function1 not null'); 
     function2(); 
    } 
    </script> 
    <script src="./function2.js"></script> 
</body> 
</html> 

그리고 자바 스크립트 파일 function2.js 외부는 기능 1을 보여줍니다 버튼을 클릭의 결과는 'null이 아닌'이며, 기능 2가 '널 (null)'이다

function function2() { 
    if (document.getElementById("<%= RunAtStartup.ClientID %>") == null) 
     alert('function2 null'); 
    else 
     alert('function2 not null'); 
} 

입니다.

문서를 매개 변수로 전달하려고 시도했지만 작동하지 않았습니다. 나는 function2(). bind (document)를 시도했다. 그것은 작동하지 않았다. 나는 자바 스크립트 디버거를 밟았으며 function1의 document 객체가 function2의 document 객체와 동일하게 보입니다. 사전 마이클

+0

은 js 파일의 이름입니다. function2.js ?? –

+0

아래 답변을 참조하십시오. 기본적으로'.js' 파일에 서버 측 코드'<%= ...%>'을 혼합하고 있습니다. – EdSF

답변

3

내가 무엇을 말할 수는 ASP.net 처리기에 의해 만들어진에서 요소의 이름에

감사합니다. JS 파일은 ASP.net에서 파싱되지 않기 때문에 실제로 요소 ID가 아닌 문자 그대로 셀렉터를 처리합니다. 따라서이 스크립트는 외부 JS 파일에서 실행할 수 없습니다. ASP 파일에서 실제 요소 ID가

<%= RunAtStartup.ClientID %> 

으로 바뀝니다. 외부 파일은 다음과 같은 것을 찾고있다 : 당신은 ASP.net하지 않고 서버에 그것을 실행하면 설치로

<span id="<%= RunAtStartup.ClientID %>"></span> 

는 다시, 리터럴 문자열로 ID를 처리합니다. 내 솔루션은 아마이처럼 ASP.net 파일의 변수에 ID를 저장하는 것입니다 :

var element = document.getElementByID(id); 

외부 JS :

var id = "<%= RunAtStartup.ClientID %>"; 

그런 다음, 외부 JS 파일은 다음을 사용할 수 있습니다 변수 id을 만든 후에 파일을 포함시켜야합니다. 또한, 더 나은 솔루션은 다음과 같이 함수의 매개 변수로 ID를 전달하는 것입니다 :

function2("<%= RunAtStartup.ClientID %>"); 

이 허용 :

function function2(id) { 
    if (document.getElementById(id) == null) 
     alert('function2 null'); 
    else 
     alert('function2 not null'); 
} 

ASP.net 파일은 다음과 같은 파일을 호출 할 수 모든 ASP.net 태그는 JS 코드로 클라이언트에 전달되기 전에 서버 측에서 파싱됩니다.

+0

고마워요. 그 말이 완벽합니다. ASP는 .js 파일을 구문 분석하고 처리하지 않습니다. 답변 해주셔서 감사합니다! – WebDrive

+0

@WebDrive 물론, 문제 없습니다. 항상 도와 드리겠습니다! –