2017-05-26 2 views
0

Ich habe eine Datentabelle mit Select Extension und eine Schaltfläche, um alle Zeilen auszuwählen, und erste Zelle, um bestimmte Zeilen zu markieren/abzuwählen und das Problem ist, dass ich keine Aktion für wenige Zeilen ausführen kann .datatables select - einige Zeilen zur Auswahl deaktivieren

$(document).ready(function() { 
 
    $('#example').DataTable({ 
 
     select: { 
 
      style: 'multi' 
 
     } 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 

 
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/v/bs-3.3.7/dt-1.10.15/af-2.2.0/b-1.3.1/b-colvis-1.3.1/b-flash-1.3.1/r-2.1.1/se-1.2.2/datatables.min.css"/> 
 
    
 
<script type="text/javascript" src="https://cdn.datatables.net/v/bs-3.3.7/dt-1.10.15/af-2.2.0/b-1.3.1/b-colvis-1.3.1/b-flash-1.3.1/r-2.1.1/se-1.2.2/datatables.min.js"></script> 
 

 
<table id="example" class="display" cellspacing="0" width="100%"> 
 
     <thead> 
 
      <tr> 
 
       <th>Name</th> 
 
       <th>Position</th> 
 
       <th>Office</th> 
 
       <th>Age</th> 
 
       <th>Start date</th> 
 
       <th>Salary</th> 
 
      </tr> 
 
     </thead> 
 
     <tfoot> 
 
      <tr> 
 
       <th>Name</th> 
 
       <th>Position</th> 
 
       <th>Office</th> 
 
       <th>Age</th> 
 
       <th>Start date</th> 
 
       <th>Salary</th> 
 
      </tr> 
 
     </tfoot> 
 
     <tbody> 
 
      <tr> 
 
       <td>Tiger Nixon</td> 
 
       <td>System Architect</td> 
 
       <td>Edinburgh</td> 
 
       <td>61</td> 
 
       <td>2011/04/25</td> 
 
       <td>$320,800</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Garrett Winters</td> 
 
       <td>Accountant</td> 
 
       <td>Tokyo</td> 
 
       <td>63</td> 
 
       <td>2011/07/25</td> 
 
       <td>$170,750</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Ashton Cox</td> 
 
       <td>Junior Technical Author</td> 
 
       <td>San Francisco</td> 
 
       <td>66</td> 
 
       <td>2009/01/12</td> 
 
       <td>$86,000</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Cedric Kelly</td> 
 
       <td>Senior Javascript Developer</td> 
 
       <td>Edinburgh</td> 
 
       <td>22</td> 
 
       <td>2012/03/29</td> 
 
       <td>$433,060</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Airi Satou</td> 
 
       <td>Accountant</td> 
 
       <td>Tokyo</td> 
 
       <td>33</td> 
 
       <td>2008/11/28</td> 
 
       <td>$162,700</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Brielle Williamson</td> 
 
       <td>Integration Specialist</td> 
 
       <td>New York</td> 
 
       <td>61</td> 
 
       <td>2012/12/02</td> 
 
       <td>$372,000</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Herrod Chandler</td> 
 
       <td>Sales Assistant</td> 
 
       <td>San Francisco</td> 
 
       <td>59</td> 
 
       <td>2012/08/06</td> 
 
       <td>$137,500</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Rhona Davidson</td> 
 
       <td>Integration Specialist</td> 
 
       <td>Tokyo</td> 
 
       <td>55</td> 
 
       <td>2010/10/14</td> 
 
       <td>$327,900</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Colleen Hurst</td> 
 
       <td>Javascript Developer</td> 
 
       <td>San Francisco</td> 
 
       <td>39</td> 
 
       <td>2009/09/15</td> 
 
       <td>$205,500</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Sonya Frost</td> 
 
       <td>Software Engineer</td> 
 
       <td>Edinburgh</td> 
 
       <td>23</td> 
 
       <td>2008/12/13</td> 
 
       <td>$103,600</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Jena Gaines</td> 
 
       <td>Office Manager</td> 
 
       <td>London</td> 
 
       <td>30</td> 
 
       <td>2008/12/19</td> 
 
       <td>$90,560</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Quinn Flynn</td> 
 
       <td>Support Lead</td> 
 
       <td>Edinburgh</td> 
 
       <td>22</td> 
 
       <td>2013/03/03</td> 
 
       <td>$342,000</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Charde Marshall</td> 
 
       <td>Regional Director</td> 
 
       <td>San Francisco</td> 
 
       <td>36</td> 
 
       <td>2008/10/16</td> 
 
       <td>$470,600</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Haley Kennedy</td> 
 
       <td>Senior Marketing Designer</td> 
 
       <td>London</td> 
 
       <td>43</td> 
 
       <td>2012/12/18</td> 
 
       <td>$313,500</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Tatyana Fitzpatrick</td> 
 
       <td>Regional Director</td> 
 
       <td>London</td> 
 
       <td>19</td> 
 
       <td>2010/03/17</td> 
 
       <td>$385,750</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Michael Silva</td> 
 
       <td>Marketing Designer</td> 
 
       <td>London</td> 
 
       <td>66</td> 
 
       <td>2012/11/27</td> 
 
       <td>$198,500</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Paul Byrd</td> 
 
       <td>Chief Financial Officer (CFO)</td> 
 
       <td>New York</td> 
 
       <td>64</td> 
 
       <td>2010/06/09</td> 
 
       <td>$725,000</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Gloria Little</td> 
 
       <td>Systems Administrator</td> 
 
       <td>New York</td> 
 
       <td>59</td> 
 
       <td>2009/04/10</td> 
 
       <td>$237,500</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Bradley Greer</td> 
 
       <td>Software Engineer</td> 
 
       <td>London</td> 
 
       <td>41</td> 
 
       <td>2012/10/13</td> 
 
       <td>$132,000</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Dai Rios</td> 
 
       <td>Personnel Lead</td> 
 
       <td>Edinburgh</td> 
 
       <td>35</td> 
 
       <td>2012/09/26</td> 
 
       <td>$217,500</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Jenette Caldwell</td> 
 
       <td>Development Lead</td> 
 
       <td>New York</td> 
 
       <td>30</td> 
 
       <td>2011/09/03</td> 
 
       <td>$345,000</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Yuri Berry</td> 
 
       <td>Chief Marketing Officer (CMO)</td> 
 
       <td>New York</td> 
 
       <td>40</td> 
 
       <td>2009/06/25</td> 
 
       <td>$675,000</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Caesar Vance</td> 
 
       <td>Pre-Sales Support</td> 
 
       <td>New York</td> 
 
       <td>21</td> 
 
       <td>2011/12/12</td> 
 
       <td>$106,450</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Doris Wilder</td> 
 
       <td>Sales Assistant</td> 
 
       <td>Sidney</td> 
 
       <td>23</td> 
 
       <td>2010/09/20</td> 
 
       <td>$85,600</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Angelica Ramos</td> 
 
       <td>Chief Executive Officer (CEO)</td> 
 
       <td>London</td> 
 
       <td>47</td> 
 
       <td>2009/10/09</td> 
 
       <td>$1,200,000</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Gavin Joyce</td> 
 
       <td>Developer</td> 
 
       <td>Edinburgh</td> 
 
       <td>42</td> 
 
       <td>2010/12/22</td> 
 
       <td>$92,575</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Jennifer Chang</td> 
 
       <td>Regional Director</td> 
 
       <td>Singapore</td> 
 
       <td>28</td> 
 
       <td>2010/11/14</td> 
 
       <td>$357,650</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Brenden Wagner</td> 
 
       <td>Software Engineer</td> 
 
       <td>San Francisco</td> 
 
       <td>28</td> 
 
       <td>2011/06/07</td> 
 
       <td>$206,850</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Fiona Green</td> 
 
       <td>Chief Operating Officer (COO)</td> 
 
       <td>San Francisco</td> 
 
       <td>48</td> 
 
       <td>2010/03/11</td> 
 
       <td>$850,000</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Shou Itou</td> 
 
       <td>Regional Marketing</td> 
 
       <td>Tokyo</td> 
 
       <td>20</td> 
 
       <td>2011/08/14</td> 
 
       <td>$163,000</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Michelle House</td> 
 
       <td>Integration Specialist</td> 
 
       <td>Sidney</td> 
 
       <td>37</td> 
 
       <td>2011/06/02</td> 
 
       <td>$95,400</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Suki Burks</td> 
 
       <td>Developer</td> 
 
       <td>London</td> 
 
       <td>53</td> 
 
       <td>2009/10/22</td> 
 
       <td>$114,500</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Prescott Bartlett</td> 
 
       <td>Technical Author</td> 
 
       <td>London</td> 
 
       <td>27</td> 
 
       <td>2011/05/07</td> 
 
       <td>$145,000</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Gavin Cortez</td> 
 
       <td>Team Leader</td> 
 
       <td>San Francisco</td> 
 
       <td>22</td> 
 
       <td>2008/10/26</td> 
 
       <td>$235,500</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Martena Mccray</td> 
 
       <td>Post-Sales support</td> 
 
       <td>Edinburgh</td> 
 
       <td>46</td> 
 
       <td>2011/03/09</td> 
 
       <td>$324,050</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Unity Butler</td> 
 
       <td>Marketing Designer</td> 
 
       <td>San Francisco</td> 
 
       <td>47</td> 
 
       <td>2009/12/09</td> 
 
       <td>$85,675</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Howard Hatfield</td> 
 
       <td>Office Manager</td> 
 
       <td>San Francisco</td> 
 
       <td>51</td> 
 
       <td>2008/12/16</td> 
 
       <td>$164,500</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Hope Fuentes</td> 
 
       <td>Secretary</td> 
 
       <td>San Francisco</td> 
 
       <td>41</td> 
 
       <td>2010/02/12</td> 
 
       <td>$109,850</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Vivian Harrell</td> 
 
       <td>Financial Controller</td> 
 
       <td>San Francisco</td> 
 
       <td>62</td> 
 
       <td>2009/02/14</td> 
 
       <td>$452,500</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Timothy Mooney</td> 
 
       <td>Office Manager</td> 
 
       <td>London</td> 
 
       <td>37</td> 
 
       <td>2008/12/11</td> 
 
       <td>$136,200</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Jackson Bradshaw</td> 
 
       <td>Director</td> 
 
       <td>New York</td> 
 
       <td>65</td> 
 
       <td>2008/09/26</td> 
 
       <td>$645,750</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Olivia Liang</td> 
 
       <td>Support Engineer</td> 
 
       <td>Singapore</td> 
 
       <td>64</td> 
 
       <td>2011/02/03</td> 
 
       <td>$234,500</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Bruno Nash</td> 
 
       <td>Software Engineer</td> 
 
       <td>London</td> 
 
       <td>38</td> 
 
       <td>2011/05/03</td> 
 
       <td>$163,500</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Sakura Yamamoto</td> 
 
       <td>Support Engineer</td> 
 
       <td>Tokyo</td> 
 
       <td>37</td> 
 
       <td>2009/08/19</td> 
 
       <td>$139,575</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Thor Walton</td> 
 
       <td>Developer</td> 
 
       <td>New York</td> 
 
       <td>61</td> 
 
       <td>2013/08/11</td> 
 
       <td>$98,540</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Finn Camacho</td> 
 
       <td>Support Engineer</td> 
 
       <td>San Francisco</td> 
 
       <td>47</td> 
 
       <td>2009/07/07</td> 
 
       <td>$87,500</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Serge Baldwin</td> 
 
       <td>Data Coordinator</td> 
 
       <td>Singapore</td> 
 
       <td>64</td> 
 
       <td>2012/04/09</td> 
 
       <td>$138,575</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Zenaida Frank</td> 
 
       <td>Software Engineer</td> 
 
       <td>New York</td> 
 
       <td>63</td> 
 
       <td>2010/01/04</td> 
 
       <td>$125,250</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Zorita Serrano</td> 
 
       <td>Software Engineer</td> 
 
       <td>San Francisco</td> 
 
       <td>56</td> 
 
       <td>2012/06/01</td> 
 
       <td>$115,000</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Jennifer Acosta</td> 
 
       <td>Junior Javascript Developer</td> 
 
       <td>Edinburgh</td> 
 
       <td>43</td> 
 
       <td>2013/02/01</td> 
 
       <td>$75,650</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Cara Stevens</td> 
 
       <td>Sales Assistant</td> 
 
       <td>New York</td> 
 
       <td>46</td> 
 
       <td>2011/12/06</td> 
 
       <td>$145,600</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Hermione Butler</td> 
 
       <td>Regional Director</td> 
 
       <td>London</td> 
 
       <td>47</td> 
 
       <td>2011/03/21</td> 
 
       <td>$356,250</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Lael Greer</td> 
 
       <td>Systems Administrator</td> 
 
       <td>London</td> 
 
       <td>21</td> 
 
       <td>2009/02/27</td> 
 
       <td>$103,500</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Jonas Alexander</td> 
 
       <td>Developer</td> 
 
       <td>San Francisco</td> 
 
       <td>30</td> 
 
       <td>2010/07/14</td> 
 
       <td>$86,500</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Shad Decker</td> 
 
       <td>Regional Director</td> 
 
       <td>Edinburgh</td> 
 
       <td>51</td> 
 
       <td>2008/11/13</td> 
 
       <td>$183,000</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Michael Bruce</td> 
 
       <td>Javascript Developer</td> 
 
       <td>Singapore</td> 
 
       <td>29</td> 
 
       <td>2011/06/27</td> 
 
       <td>$183,000</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Donna Snider</td> 
 
       <td>Customer Support</td> 
 
       <td>New York</td> 
 
       <td>27</td> 
 
       <td>2011/01/25</td> 
 
       <td>$112,000</td> 
 
      </tr> 
 
     </tbody> 
 
    </table>

Kann jemand mir sagen, wie Zeilenauswahl für Zeile basierend auf Zellendaten deaktivieren?

Vielen Dank.

+1

wo ist dein Code? –

+0

Hier ist mein Code – lucaste

+0

Sie sehen diese https://datatables.net/forums/discussion/12859/disable-row-select-event-for-certain-columns? – inye

Antwort

2

Fügen Sie Klassen (d. H. Ignoreme) zu den spezifischen Zeilen tr Elementen gemäß Ihrer Geschäftslogik hinzu. Suchen Sie im Zeilenauswahl-Ereignis nach dieser bestimmten Klasse und rufen Sie dann die Auswahlmethode ab, um die Auswahl zu ignorieren.

var table = $('#example').DataTable({ 
    select: { 
    style: 'multi' 
    } 
}); 

table.on('select', function(e, dt, type, indexes) { 
    if (type === 'row') { 
    var rows = table.rows(indexes).nodes().to$(); 
    $.each(rows, function() { 
     if ($(this).hasClass('ignoreme')) table.row($(this)).deselect(); 
    }) 
    } 
}); 

jsfiddle

0

Das folgende ist meine Implementierung, die mit Ajax bevölkerten Daten und basierend auf Datenkennungen verwendet werden kann. Es verwendet auch die ausgewählte Erweiterung mit Kontrollkästchen. Ersetzen Sie einfach die "unselectables_IDs" var durch eine dynamische Bezeichner-Array von Ihrem JSON abgerufen.

HTML Code (der Tabellenkörper zeigt gefälschte Ajax-Daten):

<table id="datatable" class="table table-hover table-striped table-condensed nowrap" width="100%"> 
    <thead> 
     <tr> 
      <th>Identifier</th> 
      <th>Model</th> 
      <th>Order</th> 
      <th>Select</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td>1</td> 
      <td>SSS</td> 
      <td>1</td> 
      <td>Un-Selectable</td> 
     </tr> 
     <tr> 
      <td>2</td> 
      <td>HHH</td> 
      <td>2</td> 
      <td>Un-Selectable</td> 
     </tr> 
     <tr> 
      <td>3</td> 
      <td>CCC</td> 
      <td>3</td> 
      <td></td> 
     </tr> 
     <tr> 
      <td>4</td> 
      <td>CCC</td> 
      <td>4</td> 
      <td>Un-Selectable</td> 
     </tr> 
     <tr> 
      <td>5</td> 
      <td>AAA</td> 
      <td>5</td> 
      <td></td> 
     </tr> 
     <tr> 
      <td>6</td> 
      <td>SSS</td> 
      <td>6</td> 
      <td></td> 
     </tr> 
    </tbody>  
    <tfoot> 
     <tr> 
      <th>Identifier</th> 
      <th>Model</th> 
      <th>Order</th> 
      <th>Select</th> 
     </tr> 
    </tfoot> 
</table> 

JS-Code:

var table = $('#datatable').DataTable({ 
    ajax: { 
     url: 'ajax_path', 
     type: 'POST', 
    }, 
    paging: false, searching: false, dom: 'rt', 
    order: [], 
    columnDefs: [ 
     { targets: [0], type: 'natural', }, 
     { targets: [3], className: 'select-checkbox dt-center', orderable: false, width: '70px', }, 
    ], 
    select: { 
     style: 'os', 
     selector: 'td.select-checkbox:not(.not-selectable):last-child', 
    }, 
    buttons: [], 

    initComplete: function(settings, json) { 
     // Select checkbox behaviors... 
     var checkbox_colIdx = 3 
     var identifiers_colIdx = 0; 
     var table = $('#datatable').DataTable(); 

     var unselectables_IDs = ['1', '2', '4']; // to be replace by your json response i.e. json['unselectables_IDs'] 
     var row_IDs = table.column(identifiers_colIdx).data(); 

     $(row_IDs).each(function(index, value) { 
      var row_ID = value.replace(/\D/g,''); 

      if ($.inArray(row_ID, unselectables_IDs) !== -1) { 
       $(table.row(index).node()).addClass('not-selectable'); 
       $(table.row(index).node()).children('td.select-checkbox').removeClass('select-checkbox'); 
      } 
     }); 

     // Deselect unselectable rows (that can still be selected by using the shift key)... 
     table.on('select', function(e, dt, type, indexes) { 
      if (type === 'row') { 
       var rows = table.rows(indexes).nodes(); 

       $.each($(rows), function() { 
        if ($(this).hasClass('not-selectable')) table.row($(this)).deselect(); 
       }) 
      } 
     }); 
    }, 
}); 

Hier ist eine Geige mit gefälschten Daten: https://jsfiddle.net/sq3hsua3/3/

Verwandte Themen