2010-02-11 5 views
3

에 나는 그것이 코드 등을 압도지고있는 페이지가 있습니다. 더 나은 접근 방법이 있습니까?잡아 asp.net 컨트롤은 자바 스크립트

document.getElementById를 다음 나는이 같은 코드와 끝까지 때문에 작동하지 않습니다

:

var textBox = document.getElementById("originDestinationControl_textState"); 

또는

var textBox = document.getElementById("ctl00_ContentPlaceHolder_originDestinationControl_textState"); 

내가 마스터 페이지 내에서 (이러한 컨트롤을 참조하고 위치에 따라와/또는 usercontrols)

답변

3

나는 일반적으로이 파일을 별도의 js 파일을 사용하려는 페이지에 붙입니다.

<script type="text/javascript"> 
    var pageNameElements = { 
     textbox : '<%= textbox.ClientId %>', 
     button : '<%= button.ClientId %>' 
    }; 
</script> 

이렇게하면 js 파일에서 사용할 수있는 모든 컨트롤 ID로 멋진 자바 스크립트 개체를 얻을 수 있습니다.

$('#' + pageNameElements.textbox) 

또는

document.getElementById(pageNameElements.textbox) 

당신이 jQuery를 사용하지 않는 경우.

+0

사실 이것은 나를 위해 작동하지 않습니다. null이되었습니다. JS 파일 : var myTextBox = document.getElementById (pageOriginElements.textOriginMultiState); 알림 (myTextBox); ASCX : <스크립트 유형 = "텍스트/자바 스크립트"> var에 pageOriginElements = { textOriginMultiState : '<% = textOriginMultiState.ClientID %>', textOriginMultiStateCountry을 '<% = hiddenOriginMultiStateCountry.ClientID %>' }; – Boone

+0

element-ids가 포함 된 객체를 만든 후에 JS 파일의 함수가 실행되는지 확인하십시오. 즉, 태그 바로 앞에 js 파일을 추가하거나 jQuery $ (document) .ready() 함수를 사용하여 돔이 준비되면. –

0

나는 문제가 발생할 것 같아요.

textState.ClientId 코드는 aspx 페이지 자체에 있어야합니다. 렌더링 된 클라이언트 측 때문입니다. JavaScript 포함 파일은 나머지 페이지와 별도로 다운로드되므로 처리 방법을 알 수 없습니다.

에이 파일을 정리하려면이 필요하면 고전적인 asp 스타일 포함 파일을 사용해보세요. 그러나 asp.net에서 그들은 그들이 고치는 것보다 더 많은 엉망을 추가하게됩니다.

2

jQuery를 배우는 것이 좋습니다. 내가 그것을 사용하기 시작한 이후로 나는 한 번도 페이지의 컨트롤을 얻기 위해 지저분한 asp 태그를 다루지 않았다.

var textBox = $get("<%=textState.ClientID%>"); 

는 jQuery를에

var textBox = $("input[id$='_textState']"); 

처럼 보일 것입니다. 그리고 더 나은, 당신은 그것을 자신의 js 파일에 넣을 수 있습니다!

관련 문제