2012-07-07 11 views
5

Estoy tratando de hacer tablas de datos para ordenar mis columnas. La primera columna funciona bien ya que es un número simple. Sin embargo, la siguiente columna es un campo de entrada. Cuando trato de hacer ese tipo, no pasa nada.¿Pueden las tablas de datos ordenar una columna con un campo de entrada?

<table width="100%" cellspacing="0" class="table sortable no-margin"> 
<thead> 
<tr> 
    <th scope="col" class="sorting" style="width: 57px;"> 
     <span class="column-sort"> 
     <a href="#" title="Sort up" class="sort-up"></a> 
     <a href="#" title="Sort down" class="sort-down"></a> 
     </span> 
     ID 
    </th> 
    <th scope="col" class="sorting_desc" style="width: 94px;"> 
     <span class="column-sort"> 
     <a href="#" title="Sort up" class="sort-up"></a> 
     <a href="#" title="Sort down" class="sort-down"></a> 
     </span> 
     Order 
    </th> 
</tr> 
</thead> 
<tbody> 
<tr id="row_20" class="odd"> 
    <td id="refKey_20" style="text-align:center;" class=""> 
     1Y 
    </td> 
    <td class=" sorting_1"> 
     <input type="text" value="160" size="3" name="item.Order" 
     maxlength="3" id="Order_20" > 
    </td> 

</tr> 
<tr id="row_19" class="even"> 
    <td id="refKey_19" style="text-align:center;" class=""> 
     1X 
    </td> 
    <td class=" sorting_1"> 
     <input type="text" value="150" size="3" name="item.Order" 
     maxlength="3" id="Order_19" > 
    </td> 

</tr> 
</tbody> 
</table> 

¿Hay alguna manera de que pueda obtener tablas de datos para ordenar los campos de entrada?

Respuesta

5

Usted debe mirar este ejemplo que explica cómo do sorting on input fields. Básicamente se declara una función de clasificación

y luego decirle a su mesa para utilizar ese

$('#example').dataTable({ 
    "aoColumns": [ 
     null, 
     { "sSortDataType": "dom-text" } 
    ] 
}); 

o ingenio aoColumnDefs

$('#example').dataTable({ 
    "aoColumnDefs": [{ "sSortDataType": "dom-text" , aTarget: "yourclass"}] 
}); 
+0

Pero tengo un problema. Uso el mismo código de actualización para diferentes tablas. Su código codifica las aoColumns. ¿Es posible configurar esto como clases en las columnas td? O, como alternativa, ¿puedo hacer un conjunto diferente de "aoColumns" y usar diferentes para cada tabla? – Alan2

+0

@Gemma solía configurar manualmente aoColumns para cada tabla, creo que debería tener diferentes conjuntos de aoColumns y usarlos según sea necesario mientras se mantienen las otras opciones –

+0

¿Ha intentado aoColumnDefs. Solo estoy tratando de aprender sobre eso. Creo que puede establecer en función de la clase de un th. – Alan2

-1

Establecer un div invisible con el valor antes de la entrada campo.

<tbody> 
<tr id="row_20" class="odd"> 
    <td id="refKey_20" style="text-align:center;" class=""> 
     1Y 
    </td> 
    <td class=" sorting_1"> 
     <div style="display:none;">160</div> 
     <input type="text" value="160" size="3" name="item.Order" 
     maxlength="3" id="Order_20" > 
    </td> 

</tr> 
<tr id="row_19" class="even"> 
    <td id="refKey_19" style="text-align:center;" class=""> 
     1X 
    </td> 
    <td class=" sorting_1"> 
     <div style="display:none;">150</div> 
     <input type="text" value="150" size="3" name="item.Order" 
     maxlength="3" id="Order_19" > 
    </td> 
</tr> 
</tbody> 
+0

Esto no funciona cuando el usuario edita el valor de entrada, sin código para actualizar el valor del evento de cambio, que parece demasiado trabajo. –

8

Para las versiones de tablas de datos 1.10+ los nombres de algunas variables de opciones se han cambiado y una nueva API introducido. Documentación aquí: http://datatables.net/examples/plug-ins/dom_sort.html.

Aquí está una versión de trabajo de la respuesta aceptada anteriormente en 1.10+:

$(document).ready(function() { 
    var table = $('#example').DataTable({ 
     "columnDefs": [ 
      { 
       "orderDataType": "dom-input", 
       "targets": 0, // Just the first column 
      }, 
     ], 
    }); 
}); 

La función de ordenación:

$.fn.dataTable.ext.order['dom-input'] = function (settings, col) { 
    return this.api().column(col, { order: 'index' }).nodes().map(function (td, i) { 
     return $('input', td).val(); 
    }); 
} 
+0

Esto funciona pero no en cadenas, solo campos numéricos –

+0

Debe agregar type: 'string' al objeto de matriz columnDefs para que funcione en campos alfanuméricos –

Cuestiones relacionadas