2011-11-18 3 views
3

그래서 내 데이터 테이블에는 레코드를 편집 할 수있는 버튼이 있습니다. JQuery를 사용하여 버튼 클릭에 스타일을 지정하고 기능을 제공하고 있습니다. JQuery가 버튼에 적용되도록하는 유일한 방법은 코드를 테이블의 fnDrawCallback 옵션 안에 넣는 것입니다. 그러나 함수의 여러 인스턴스가 발생합니다! 예를 들어 테스트하기 위해 단추를 클릭 할 때 단추 ID (레코드 ID)를 알려주는 경고를 작성하고 있습니다. 그리고 한 번만 경고하는 대신 몇 가지 경고를 내 보냅니다!JQuery DataTables - fnDrawCallback 재귀적인 문제

아이디어가 있으십니까?

* 부수적으로 fnInitComplete 옵션 내부에서 함수를 선언했지만 기능은 표시되는 첫 번째 레코드 집합 (예 : 10)에만 적용됩니다. 더 많은 레코드를 표시하거나 다음 페이지로 이동하면 해당 레코드에서 해당 기능이 작동하지 않습니다.

var tfTable = $('.mypbhs_truforms').dataTable({ 
     "bProcessing": true, 
     "sAjaxSource": 'sql/mypbhs_truforms.php?accountid=<?PHP echo $accountid;?>',   
     "aaSorting": [[ 1, "asc" ]], 
     "bJQueryUI": true, 
     "sPaginationType": "full_numbers", 
     //"bStateSave": true, //Use a cookie to save current display of items 
     "aoColumns": [ 
      {"asSorting": [ ], "sClass":"center"}, 
      null, 
      null, 
      null, 
      null, 
      null, 
      {"asSorting": [ ], "sClass":"center"}, 
     ], 
     "fnDrawCallback": function(){ 
      //EDIT OFFICE FORM 
      $('.mypbhs_edit_truform_button').click(function(){ 
       var tf_id = $(this).attr('id'); 
       alert(tf_id); 
      }); 
     }, 
     "bScrollCollapse": true, 
     "sScrollX": "100%", 
     "fnInitComplete": function() { 
       tfTable.fnAdjustColumnSizing(); 
     } 
    }); 

답변

1

이렇게 주위에 길을 찾았습니다. fnDrawCallback 옵션에 배치 한 모든 함수에 JQuery의 .on 함수를 사용합니다. fnDrawCallback을 사용하면 누군가가 그 대답을 가지고 있지만 같은 함수의 여러 인스턴스를 만드는 것이 궁금합니다.

0

.mypbhs_edit_truform_button은 어디에 있습니까? 원시 테이블 자체 외부에 있으면 테이블을 다시 그릴 때마다 다시 바인딩됩니다. .on()이 작동하기 때문에 아마도 delegate 모드 일 것입니다. (왜냐하면 그것은 .click()의 ​​직접적인 변환 일 수 있기 때문입니다) 이것은 원시 테이블 자체 외부에서 살기 때문에 다중 바인딩을 의미합니다.

원래 방법대로하고 싶다면 (.on()이 더 좋습니다.) InitComplete 콜백에 넣지 않을 이유가 있습니까?