2016-07-20 1 views
0

JQuery 데이터 테이블을 파괴하는 데 문제가 있습니다. 내가 그것을 파괴하려고 곳jQuery 데이터 테이블을 파괴 할 수 없습니다.

다음
$(document).ready(function() { 
    var table = $(".dynamic-wide-table").DataTable({ 
     "aaSorting": [], 
     "scrollX": true, 
     "scrollY": 530, 
     "scrollCollapse": true, 
     "lengthMenu": [ 
      [100, 400, 1000, 5000, -1], 
      [100, 400, 1000, 5000, "All"] 
     ], 
     "retrieve": true 
    }); 
}); 

은 다음과 같습니다 :

Uncaught TypeError: table.destroy is not a function 
Uncaught TypeError: table[0].destroy is not a function 

은 사람이 무엇을 알고 있습니까 : 여기

$(document).ready(function() { // Note that my page has two tables on it! 
    table.destroy(); 
    table[0].destroy(); 
});  // Trying to delete both tables first, then just the first table 

내 오류가 있습니다 내가 그것을 초기화 곳에있다

입니다 계속 해! 나는 매우 혼란 스럽다.

편집 : 여기

내가 table을 CONSOLE.LOG 때 발생의 이미지입니다.

enter image description here

+0

! https://jsfiddle.net/cmedina/7kfmyw6x/79/ – CMedina

+0

광산은 클래스별로 선택되며 시작되고 별도의 파일로 파괴됩니다. 그것과 관련이있을 수 있습니까? – Nic

+0

이 [답변] (http://stackoverflow.com/questions/38486062/retest-datatable-object-of-element/38486244)에서 설명한 것처럼 ID를 사용하여 dataTable 객체를 가져 와서 함수를 호출해야합니다. [ jsFiddle] (https://jsfiddle.net/63qhddxx/) –

답변

1

각() 루프 테이블을 인스턴스화 및 배열에 저장 :

$(document).ready(function() { 
     var tables = []; 

    $("table").each(function(i){ 
    var table = $(this).DataTable({ 
     "aaSorting": [], 
     "scrollX": true, 
     "scrollY": 530, 
     "scrollCollapse": true, 
     "lengthMenu": [ 
      [100, 400, 1000, 5000, -1], 
      [100, 400, 1000, 5000, "All"] 
     ], 
     "retrieve": true 
    }); 
    tables.push(table); 
    }); 

    $('#button').click(function() { 
     // Then you can call destroy on that object 
     var elem = tables[0].table().node(); 
     tables[0].destroy(); 
     // And empty the element 
     $(elem).empty() 
    }); 
}); 

링크

+0

잡히지 않은 TypeError : $ (...) [0] .DataTable이 함수가 아닙니다. – Nic

+0

@Nic은 테이블 인스턴스에서 destroy를 호출합니다. –

+0

전역 테이블이므로 테이블을 이동해야했습니다. 그렇지 않으면이 작업이 아름답게 작동합니다. 정말 고마워! – Nic

0

jsFiddle에 당신은 모두 만들 수 없습니다 및 DataTable을 파괴 $(document).ready() 내에서 해당 이벤트가 동시에 트리거되기 때문입니다. @ CMedina의 JSfiddle에서 버튼 클릭과 같이 트리거되었을 때 작동하는 것을 볼 수 있습니다. (이들은 동일한 파일에 있다고 가정합니다)이 부분을 무시하십시오. 분명히 그들은 서로 다른 파일입니다.

작성/파괴가 다른 파일에 있다는 의견에 유의하십시오. 그게 사실이라면, 파괴 파일은 table을 어떻게 알 수 있습니까? DataTable (해당 페이지에 스크립트 파일을 포함하지 않아도 발생할 수 있음)을 인식하지 못하면 destroy()이 무엇인지 모르고 오류가 발생합니다.

편집 : 난 그냥 당신이 table[0]에 다음 tabledestroy()를 사용하려고하고 있습니다 것으로 나타났습니다. table을 DataTable 및 DataTable의 배열로 가질 수 없습니다. 배열에서 테이블을 고유하게 또는 둘 다 명명 해보십시오. 하나

var table; 
table[0] = $('#example').DataTable(); 
table[1] = $('#example2').DataTable(); 

또는 (아마 더 나은)

var table1 = $('#example').DataTable(); 
var table2 = $('#example').DataTable(); 
+0

데이터 테이블 생성을 포함하는'main.js'는 destroy 함수가있는 HTML 페이지의 head 섹션에 포함되어 있습니다. – Nic

+0

@ CMedina의 JSfiddle처럼 onclick을 추가했습니다. 나는'Uncaught TypeError : table [0] .destroy는 함수의 오류가 아니다. '라는 오류 메시지를받습니다. 또한 인덱스없이 시도하고'Uncaught TypeError : table.destroy는 함수가 아닙니다'. – Nic

+0

콘솔에'table'을 출력 할 때 일어나는 일에 대한 이미지를 추가했습니다. – Nic

1

나는 당신이 당신의 페이지에 2 datatables을 가지고 있다고 가정하고 initializacion 클래스 .dinamyc-wide-table 모든 테이블입니다.

하나의 테이블 만 삭제하려면 페이지에있는 모든 데이터 테이블을 tables 기능으로 가져와야합니다.

그런 다음 지정된 테이블에 destroy를 적용하십시오. (예제에서는 2 개의 datatables로 작업합니다).

$(document).ready(function() { 
var table = $(".dynamic-wide-table").DataTable({ 
    "aaSorting": [], 
    "scrollX": true, 
    "scrollY": 530, 
    "scrollCollapse": true, 
    "lengthMenu": [ 
     [100, 400, 1000, 5000, -1], 
     [100, 400, 1000, 5000, "All"] 
    ], 
    "retrieve": true 
}); 


$('#destroy1').click(function() { 
    var dt1 = $.fn.dataTable.tables()[0]; 
    $(dt1).DataTable().destroy(); 
}); 

$('#destroy2').click(function() { 
var dt2 = $.fn.dataTable.tables()[1]; 
    $(dt2).DataTable().destroy(); 
}); 
}); 

결과 : 제대로 작동https://jsfiddle.net/cmedina/7kfmyw6x/80/

+0

'$ .fn.dataTable.tables()'는 어떤 이유로 든 하나의 테이블 만 포함합니다. 그러나,'console.log (table)'에는 @CMedina가 포함되어 있습니다. 그러나 테이블 1 개를 삭제하면 작동합니다. – Nic

+0

도움을 받으려면 코드를 게시하십시오! (HTML + JS) 완료! – CMedina

+0

각 테이블은 고유 한 부트 스트랩 탭에 있습니다. 그것은 단지 하나의 테이블만을 발견 할 수있는 이유가 될 수 있습니까? @CMedina – Nic

관련 문제