2013-06-06 2 views
0

Удивительный плагин datatables (datatables.net) имеет возможность выполнять сортировку нескольких столбцов, удерживая их в сдвиге при нажатии на заголовок.jQuery DataTables multi sort without shift

Есть ли способ включить это, не удерживая в модификаторе сдвига? Я полностью в недоумении :(

+0

Мне было сложно решить, как отправить несколько серверов на сервер. Этот вопрос сам по себе ответил на мой вопрос. – avantprime

ответ

2

Нечетный запрос. Конечно, он существует по какой-либо причине. Если вы устраните требование сдерживания сдвига, как вы узнаете, хочет ли пользователь сортировать по второму столбцу все сам по себе или хочет сортировать по двум столбцам? Если пользователь нажимает на сортировку в столбце A, то нажимает для сортировки по столбцу B - хочет ли пользователь сортировать по A и B или просто B?

В любом случае , Я не вижу способа сделать это в Datatables. Вы можете изменить исходный код, если у вас должна быть эта функция. Если вы загрузите не минимизированную версию, отсюда например: http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/jquery.dataTables.js, затем выполните поиск e.shiftKey, вы увидите код. Вместо if (e.shiftKey), просто сделайте это if(true) или закомментируйте if.

0

Решение проблемы. (проверено с использованием datatables версии 1.10.12)

Необходимо отменить событие клика и восстановить функцию сортировки вручную.

Во-первых, добавить класс к вашему DataTable:

<table class="datatableMultiSorting">

Затем добавьте JS:

$('.datatableMultiSorting th').unbind('click.DT'); 
$('.datatableMultiSorting th').click(function() { 
    currentTable = $(this).closest(".datatableMultiSorting").dataTable(); 
    thisIndex = $(this).index(); 
    //console.log(thisIndex); 
    var sortArray = []; 
    $(this).siblings().andSelf().each(function(index) { 
     if(index==thisIndex){ 
      if ($(this).hasClass("sorting")){ 
       sortArray.push([index,'asc']); 
      } 
      if ($(this).hasClass("sorting_asc")){ 
       sortArray.push([index,'desc']); 
      } 
     } else{ 
      if ($(this).hasClass("sorting_asc")){ 
       sortArray.push([index,'asc']); 
      } 
      if ($(this).hasClass("sorting_desc")){ 
       sortArray.push([index,'desc']); 
      } 
     } 
    }); 
    currentTable.fnSort(sortArray); 
}); 

Примечание: используйте скрипт только после DataTable инициализации.