2010-06-19 6 views
3

간단히 말해 client-click 이벤트에 대해 하나의 textBox 'txtPersonId'의 클라이언트 ID를 전달하려고 시도하고 있으므로 해당 textBox 컨트롤을 탐색하여 jQuery 래퍼를 loadePerson() 함수에 전달할 수 있습니다.jQuery에서 찾을 수 있도록 여기에 마크 업에있는 textBox의 clientId를 추가 할 수없는 이유는 무엇입니까?

<asp:Button ID="btnSearch" runat="server" Text="ARA" OnClientClick="loadPerson(jQuery('#<%=txtPersonId.ClientID %>'))"/> 

을하지만 그것을 렌더링 할 때

<%=txtPersonId.ClientID %> 

장소 홀더 숙박 그대로 그리고 그것은으로 대체되지 않습니다

이 내가 영문 마크 업에서 그것을 decalre 어떻게 렌더링 된 컨트롤의 클라이언트 ID

왜 이런 일이 발생하며 어떻게 극복해야합니까?

답변

4

이와 같은 문제가 발생했을 때 나는 전체 표현식을 대괄호로 묶고 그 결과를 문자열로 만드는 것에 의지했습니다. 파서가 문자열 속성 안에 포함 된 렌더링 블록 구문을 인식하지 못하기 때문이라고 가정합니다.

<asp:Button ID="btnSearch" runat="server" Text="ARA" 
     OnClientClick='<%= "loadPerson(jQuery(\"#" + txtPersonId.ClientID + "\"))" %>' /> 

내 마크까지 완전히 별개 내 자바 스크립트를 유지로 이동 이후 긴했습니다, 그래서 정확한 세부 사항에 약간 퍼지 될 수있다. 자바 스크립트를 마크 업과 분리하려면 스크립트 블록에 명시 적 또는 상대적 DOM 참조와 함께 핸들러를 추가 할 수 있습니다. id에 "ends with"선택기를 사용하면 명시 적 ID를 찾을 필요가 없지만 그렇게 할 수도 있습니다. 아래 예제에서는 두 스타일을 보여줍니다.

<script type="text/javascript"> 
     $(function() { 
      $('#' + '<%= btnSearch.ClientID %>').click(function() { 
       loadPerson($('input[id$=txtPersonId]')); 
      }); 
     }); 
</script> 
+0

그렇다면 runat = "server"가 아닌 경우 제대로 작동합니다. 저주, webforms 다시 않습니다;) – Marc

0

나는 당신의 LoadPerson을 무엇을하는지 모르겠지만, 당신이 jQuery를 귀하의 클릭 이벤트에 대한 함수를 작성하려는 경우 당신은 같은 것을 할 수 있습니다 :

'#'+ '<퍼센트 = txtPersonId.ClientID %를 > ''를 클릭하면 txtbox ID를 처리 할 수 ​​있습니다. $ ('#'+ '< % = btnSearch.ClientID %>'). (function() {// click event process});

관련 문제