2012-07-07 2 views
2

나는 datatables와 함께 jqueryui 대화 상자를 사용하는 페이지가 있습니다. 버튼을 클릭하면 대화 상자가 열리고 표 내용이 표시됩니다. 데이터 테이블이 없으면 대화 상자가 예상대로 수행됩니다. 그러나 datatables 테이블에 적용 할 때 예상 된 결과를 얻을 수 없습니다. 그래서 내 질문은,이 일을하는 가장 좋은 방법은 무엇입니까?jquery UI 대화 상자에 datatables 적용

대화 HTML :

<div id="customerDialog"> 
    <input type="button" id="selectCustomer" name="selectCustomer" value="Select" /> 
    <table id="custTable"> 
    <thead> 
     <tr> 
     <th>Id</th> 
     <th>First Name</th> 
     <th>Last Name</th> 
     <th>Email</th> 
     <th>Mobile</th> 
     </tr> 
    </thead> 
    <tbody> 

     <tr> 
     <td><input type="radio" id="custId" name="custId" value="0" /></td> 
     <td>x</td> 
     <td>ye</td> 
     <td>[email protected]</td> 
     <td>000000000</td> 
     </tr> 
     <tr> 
     <td><input type="radio" id="custId" name="custId" value="1" /></td> 
     <td>x</td> 
     <td>ye</td> 
     <td>[email protected]</td> 
     <td>000000000</td> 
     </tr> 
     <tr> 
     <td><input type="radio" id="custId" name="custId" value="2" /></td> 
     <td>x</td> 
     <td>ye</td> 
     <td>[email protected]</td> 
     <td>000000000</td> 
     </tr> 
     <tr> 
     <td><input type="radio" id="custId" name="custId" value="3" /></td> 
     <td>x</td> 
     <td>ye</td> 
     <td>[email protected]</td> 
     <td>000000000</td> 
     </tr> 
     <tr> 
     <td><input type="radio" id="custId" name="custId" value="4" /></td> 
     <td>x</td> 
     <td>ye</td> 
     <td>[email protected]</td> 
     <td>000000000</td> 
     </tr> 

    </tbody> 
    </table> 
</div> 

내 jQuery 코드 :

$(document).ready(function() { 
    $('#customerDialog').dialog({ 
     autoOpen: false, 
     title: "Customers", 
     show: "blind", 
     hide: "explode", 
     modal: true, 
     width: 500 
    }); 

    $('#custTable').dataTable({ 
     bJQueryUI: true 
    }); 

    $('#selectCustomer').click(function() { 
     var target = $(this); 
     $('#customerDialog').dialog("open"); 
     $('#customerDialog').dialog("widget").position({ 
      my: 'left top', 
      at: 'left bottom', 
      of: target 
     }); 
    }); 
}); 
+1

"예상 결과"는 무엇을 의미합니까? 대화 상자가 열리지 않습니까? 또는 무엇을? – carbontax

+0

예, 대화 상자가 열리지 만 데이터 테이블이 적용되지 않고 일반 html 테이블이 표시됩니다 – Chappex

답변

1

영업의 코드가 정확하고 실제로는 작동합니다.

http://jsfiddle.net/nicolapeluchetti/CuvkR/

해결 방법 : 자바 스크립트를 많이 사용와 마찬가지로

$('#customerDialog').dialog({ 
    autoOpen: false, 
    title: "Customers", 
    show: "blind", 
    hide: "explode", 
    modal: true, 
    width: 500 
}); 

$('#custTable').dataTable({ 
    bJQueryUI: true 
}); 

$('#selectCustomer').click(function() { 
    var target = $(this); 
    $('#customerDialog').dialog("open"); 
    $('#customerDialog').dialog("widget").position({ 
     my: 'left top', 
     at: 'left bottom', 
     of: target 
    }); 
}); 
+0

네가 맞습니다. 그것은 jsfiddle에서 작동하지만 그것은 내 애플 리케이션에서 작동하지 않습니다. 그것은 몇 가지 URL/경로 매핑 문제 또는 뭔가있을 수 있습니까? jsp 및 apache tiles와 함께 spring mvc를 사용하고 있습니다. – Chappex

0

http://jsfiddle.net/nicolapeluchetti/CuvkR/ 내가 같은 기술을 사용합니다. 이 경우 일반적인 문제를 설명하는 경우 플러그인 (데이터 테이블)을 초기화 할 때 DOM 요소가 존재하지 않는다는 것입니다.

AJAX 호출을 통해 대화 상자의 내용을로드하고 있습니까? 그렇게 보이지는 않지만 코드를 단순화 할 수 있습니다.

그래서, 당신은 '이 예에서이

$(document).trigger('datatable_loaded'); 

을 당신의 준비() 함수

$(document).on('datatable_loaded', function() { 
     $('#custTable').dataTable({ 
      bJQueryUI: true 
     }); 
    }); 

내부 및 AJAX 성공 콜백이 같은 사용자 정의 이벤트를 사용해야하는 경우 datatable_loaded '는 당신이 던져서 붙잡는 임의의 문자열입니다. 대화 내용을로드하는 데 AJAX를 사용하지 않는 경우이 방법은 오류가 다른 곳에서 발생하기 때문에 도움이되지 않습니다.

+0

답장을 보내 주셔서 감사합니다 !! 데이터를 가져 오기 위해 아약스를 사용하지 않습니다. 페이지가 처음로드 될 때 데이터가 제공되고 그때까지 테이블이 채워집니다. datatable_reloaded 이벤트를 트리거하는 다른 방법이 있습니까 ?? – Chappex

+0

나는 그것을 명확하게하기 위해 나의 대답을 편집했다. 데이터 테이블 플러그인에는 'datatable_loaded'이벤트가 없습니다. 그것은 관례입니다. 당신의 문제는 다른 곳에있는 것처럼 보입니다. 자바 스크립트 오류가 있는지 확인하기 위해 Firebug를 사용하고 있습니까? – carbontax

관련 문제