2012-02-27 2 views
1

해결 된 문제가 있지만 물어보고 싶은데, 다른 해결책이 있습니다. 여기에 상황이 있습니다. aspx 페이지가 있습니다. 일부 코드 숨김 기능을 사용하면 DB에서 데이터를 가져옵니다. 테이블에서 JQ를 통해 호출 된 함수 및 데이터. 서버가 수학 html 형식으로 준비한 데이터. (그대로)즉 동적으로 생성 된 마크 업에서 이벤트를 발생시키지 않습니다.

$.ajax({ 
      type: "POST", 
      url: "somePage.aspx/foo", 
      data: "{ 'Id' : '" + ID + "'}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function(msg) { 
       $("#brandTable").html(msg.d); 
      } 

각 반환 된 행은 다음과 같이보고한다 :

<tr btcsId='152' id='btcsId_152' onclick='brandClick(9,24,152)'> 
<td class='DataGridItem' style='padding:3px; margin:0;font-weight:bolder;'>something<input type='hidden' id='brandID_btcsId152' value='24' brandName='something'/></td> 
</tr> 

테이블 마크 업 :

<table class="DataGrid" id="brandTable" style="padding: 0px; margin: 0px; width:100%;border-collapse:collapse;table-layout:fixed;word-wrap:break-word;" border = "0" cellspacing="0" cellpadding="0"> 
    </table> 

그래서 문제가 있었다, 해당 이벤트는 onclick을 단지 IE7에서 앞쪽으로 . ie8, ie9 잘 작동합니다. 몇 가지 생각을하고 나자마자이 코드를 즉시 추가하여 테이블 채우기를 결정했습니다. 즉, 각 행에 대해 이벤트를 reinit하십시오.

가 잘 작동 보인다 후 것을
$("[id^='btcsId_']").each(function() { 
    $(this).click(function() { 
    var thisID = $(this).attr("id"); 
    brandClick(specialityID,$("#"+thisID +" > TD > INPUT").val(),$(this).attr("btcsId")); 
    }); 
}); 

. 하지만 맞습니까? 어쩌면 다른 방법이 있을까요?

답변

1

테이블 요소 해당 이벤트의 처리를 위임 할 delegate() 또는 on() (jQuery를> 1.7)를 사용하여 보를 모십니다 것 인피 방법 :이

dinamically 추가 요소도 작동
$("table#idofYourTable").on("click", "[id^='btcsId_']", function() { 
    var thisID = this.id; 
    brandClick(specialityID,$("#"+thisID +" > TD > INPUT").val(),$(this).attr("btcsId")); 

}); 
+0

이 해결책을 시도했습니다. 그것은 각각과 함께 광산을 사용하는 것과 같은 작업입니다. 효율성을 확인할 수 없습니다. 그러나 당신의 경험에 의존 할 것입니다. – aleha

+0

@aleha 차이점은 각 요소에 대해 하나의 이벤트 처리기를 사용하는 대신 하나의 이벤트 처리기 만 있다는 것입니다. 이것이 바로 접근 방식입니다. –

+0

ie8에서이를 확인하십시오. 더블 이벤트 화재, 좋은 looing하지. 마크 업에서 네이티브 onclick을 제거해야합니다.>> .cs 코드 수정 – aleha

1

아니요. 올바르지 않습니다. 당신은 바인딩 할 수 없습니다 미래의 요소를 클릭하십시오.

은 어느 쪽이든 당신은 요소의 온 클릭 서명 + 실행을 쓰기 - 또는

$("[id^='btcsId_']").each(function() { 
    $(this).live(function() { 
    var thisID = $(this).attr("id"); 
    brandClick(specialityID,$("#"+thisID +" > TD > INPUT").val(),$(this).attr("btcsId")); 
    }); 
}); 

대신 라이브의 On 사용을 고려하시기 바랍니다 라이브/ON (이상)으로 바인딩합니다.

(> 1.7)

+0

그는 자신의 코드가 작동하고 있다고 말하면서 가장 좋은 방법은 delegate() 또는 on()을 사용하는 것이 아니라고 생각합니다. –

+0

@NicolaPeluchetti 왜 코드가 작동하는지 알지 못합니다. Live/On을 대신 사용하십시오. –

+0

을 (를) 추가하는 것을 잊었습니다. jquery-1.5.2.min.js – aleha

관련 문제