<html>
<head>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<link href="https://nightly.datatables.net/css/jquery.dataTables.css" rel="stylesheet" type="text/css" />
<script src="https://nightly.datatables.net/js/jquery.dataTables.js"></script>
<link href="https://cdn.datatables.net/responsive/2.2.9/css/responsive.dataTables.css" rel="stylesheet" type="text/css" />
<script src="https://cdn.datatables.net/responsive/2.2.9/js/dataTables.responsive.js"></script>
<link href="https://cdn.datatables.net/select/1.3.3/css/select.dataTables.css" rel="stylesheet" type="text/css" />
<script src="https://cdn.datatables.net/select/1.3.3/js/dataTables.select.js"></script>
<meta charset=utf-8 />
<title>DataTables - JS Bin</title>
</head>
<body>
<div class="container">
<div><input type="button" class="btn btn-success" value="Add Entrega" onclick="addEntrega()"></div>
<div id="entregas-list" class="entregas-list">
<p>No hay entregas cargadas.</p>
<!-- ### ENTREGA: Estructura modelo ### -->
<div id="entrega-x">
<div class="row">
<div><label class="form-control-label">Entrega X - x bultos - z Kgs</label></div>
</div>
<div id="entrega-x-detalle">
<div class="row">
<div >
<div class="form-group">
<label class="form-control-label">Origen: <span class="tx-danger">*</span></label>
<div class="input-group">
<input type="text" id="entrega-x-origen" name="entrega-x-origen"
class="form-control" required value=""
data-parsley-errors-container="#entrega-x-origenErrorContainer">
<!--
<select class="form-control" data-plugin="selectpicker"
data-live-search="true" data-allow-clear="true" name="entrega-x-origen"
id="entrega-x-origen" required
data-parsley-errors-container="#entrega-x-origenErrorContainer">
<option value="">Ingrese una dirección..</option>
<c:forEach items="${dirOrigen}" var="direccion">
<option value="${direccion.id}"
<c:if test="${entrega.origen.id == direccion.id}">selected="selected"</c:if>>${direccion.text}</option>
</c:forEach>
</select>
-->
</div>
<div id="entrega-x-origenErrorContainer"></div>
</div>
</div>
<div >
<div class="form-group">
<label class="form-control-label">Destino: <span class="tx-danger">*</span></label>
<div class="input-group">
<input type="text" id="entrega-x-destino" name="entrega-x-destino"
class="form-control" required value=""
data-parsley-errors-container="#entrega-x-destinoErrorContainer">
<!--
<<select class="form-control" data-plugin="selectpicker"
data-live-search="true" data-allow-clear="true" name="entrega-x-destino"
id="entrega-x-destino" required
data-parsley-errors-container="#entrega-x-destinoErrorContainer">
<option value="">Ingrese una dirección para buscar..</option>
<c:forEach items="${dirDestino}" var="direccion">
<option value="${direccion.id}"
<c:if test="${entrega.destino.id == direccion.id}">selected="selected"</c:if>>${direccion.text} </option>
</c:forEach>
</select>
-->
</div>
<div id="entrega-x-destinoErrorContainer"></div>
</div>
</div>
</div>
<div id="entrega-x-materiales">
<table id="entrega-x-materiales-tabla" class="display nowrap entrega-materiales-tabla">
<thead>
<tr>
<th>ID</th>
<th></th>
<th>CODIGO</th>
<th>NOMBRE</th>
<th>CANTIDAD</th>
<th>PESO (Kg)</th>
<th></th>
</tr>
<tr>
<th></th>
<th></th>
<th>
<input id="material-id" type="hidden">
<input id="material-codigo" type="text" class="form-control" placeholder="Código">
</th>
<th><input id="material-nombre" type="text" class="form-control" value="AGUA 12x500 123"></th>
<th><input id="material-cantidad" type="number" min="0" step="0.1" class="form-control" placeholder="Cantidad"></th>
<th><input id="material-peso" type="text" class="form-control" value="24 Kg" readonly></th>
<th>
<div class="btn-group" role="group">
<button id="btn-agregar-material" type="button" class="btn btn-success material">Add</button>
<button id="btn-eliminar-material" type="button" class="btn btn-info material tx-12">Del<span></span></button>
</div>
</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
body {
font: 90%/1.45em "Helvetica Neue", HelveticaNeue, Verdana, Arial, Helvetica, sans-serif;
margin: 0;
padding: 0;
color: #333;
background-color: #fff;
}
var pedido = {
cliente: null,
fechaEntrega: null,
entregas: new Array(),
};
function agregarMaterial (e){
var entrega = e.data;
var material = {
id: entrega.form.id.val(),
codigo: entrega.form.codigo.val(),
nombre: entrega.form.nombre.val(),
cantidad: entrega.form.cantidad.val(),
peso: entrega.form.peso.val(),
acc: " ",
sel: ""
};
entrega.materiales
.row.add(material)
.draw(false);
}
function tablaMaterialesSelectHandler (e, dt, type, indexes){
var btnEliminar = e.data.form.btnEliminar;
var sel = e.data.materiales.rows('.selected').data().length;
if (sel > 0){
btnEliminar.find('span').html(' (' + sel + ')');
if (!btnEliminar.is(':visible'))
btnEliminar.show();
} else {
btnEliminar.hide();
}
}
function tablaMaterialesSelectHandler2 (e, dt, type, indexes){
var btnEliminar = $('#btn-eliminar-material');
var sel = dt.rows('.selected').data().length;
if (sel > 0){
btnEliminar.find('span').html(' (' + sel + ')');
if (!btnEliminar.is(':visible'))
btnEliminar.show();
} else {
btnEliminar.hide();
}
}
function addEntrega(){
var pedido = window.pedido;
var i = pedido.entregas.length + 1;
var entrega = {
dom: $('#entrega-x').clone(true,true),
origen: null,
destino: null,
materiales: null,
form: {
id: null,
codigo: null,
nombre: null,
cantidad: null,
peso: null,
btnAgregar: null,
btnEliminar: null
},
bultos: 0,
peso: 0
};
// Nombrado de elementos
entrega.dom.attr('id', 'entrega-' + i);
// Contenedor de todo el detalle
entrega.origen = entrega.dom.find('#entrega-x-detalle').attr('id', 'entrega-' + i + '-detalle');
// Datos de origen y destino
entrega.origen = entrega.dom.find('#entrega-x-origen')
.attr('id', 'entrega-' + i + '-origen')
.attr('data-parsley-errors-container', 'entrega-' + i + '-origenErrorContainer');
entrega.dom.find('#entrega-x-origenErrorContainer').attr('id', 'entrega-' + i + '-origenErrorContainer');
entrega.destino = entrega.dom.find('#entrega-x-destino')
.attr('id', 'entrega-' + i + '-destino')
.attr('data-parsley-errors-container', 'entrega-' + i + '-destinoErrorContainer');
entrega.dom.find('#entrega-x-destinoErrorContainer').attr('id', 'entrega-' + i + '-destinoErrorContainer');
// Contenedor de los materiales
entrega.dom.find('#entrega-x-materiales').attr('id', 'entrega-' + i + '-materiales');
// DataTable de los materiales para la entrega-i
entrega.materiales = entrega.dom.find('#entrega-x-materiales-tabla').attr('id', 'entrega-' + i + '-materiales-tabla');
// Inputs y controles del fomulario de carga de materiales a la tabla
entrega.form.id = entrega.dom.find('#material-id').attr('id', 'material-' + i + '-id');
entrega.form.codigo = entrega.dom.find('#material-codigo').attr('id', 'material-' + i + '-codigo');
entrega.form.nombre = entrega.dom.find('#material-nombre').attr('id', 'material-' + i + '-nombre');
entrega.form.cantidad = entrega.dom.find('#material-cantidad').attr('id', 'material-' + i + '-cantidad');
entrega.form.peso = entrega.dom.find('#material-peso').attr('id', 'material-' + i + '-peso');
entrega.form.btnAgregar = entrega.dom.find('#btn-agregar-material').attr('id', 'btn-agregar-material-' + i);
entrega.form.btnEliminar = entrega.dom.find('#btn-eliminar-material').attr('id', 'btn-eliminar-material-' + i);
entrega.form.btnEliminar.hide();
// Agrego la entrega a la vista y la hago visible
$('#entregas-list').prepend(entrega.dom);
// Inicialización de la tabla de carga de materiales
entrega.materiales = entrega.materiales.DataTable({
dom:
"<'row'<'col-sm-12'tr>>" +
"<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
pageLength: 25,
lengthMenu: [[10, 25, 50, 100, 200, -1], [10, 25, 50, 100, 200, "Todo"]],
fixedHeader: true,
orderCellsTop: true,
processing: true,
retrieve: true,
select: {
style: 'multi'//,
//selector: 'td:first-child'
},
autoWidth: true,
order: [[ 0, 'desc' ]],
language: {
searchPlaceholder: 'Buscar...',
sProcessing: "<span style='color: white;font-size: 20px;'>CARGANDO...</span>",
sLengthMenu: "_MENU_ registros por pag.",
sZeroRecords: "No se encontraron resultados",
sEmptyTable: "No hay datos disponibles en la tabla",
sInfo: "Items del _START_ al _END_ de _TOTAL_ items",
sInfoEmpty: "",
sInfoFiltered: "",
sInfoPostFix: "",
sSearch: "",
sUrl: "",
sInfoThousands: ",",
sLoadingRecords: "Cargando...",
oPaginate: {
sFirst: "Primero",
sLast: "Último",
sNext: "Siguiente",
sPrevious: "Anterior"
},
oAria: {
sSortAscending: ": Activar para ordenar la columna de manera ascendente",
sSortDescending: ": Activar para ordenar la columna de manera descendente"
},
buttons: {
copy: "Copiar",
colvis: "Visibilidad"
},
select: {
rows: {
_: "%d items seleccionados",
0: "",
1: "1 item seleccionado"
}
}
},
columns: [
{ data: 'id' },
{ data: 'sel' },
{ data: 'codigo' },
{ data: 'nombre' },
{ data: 'cantidad' },
{ data: 'peso' },
{ data: 'acc' }
],
columnDefs: [
{
"targets": [1],
"orderable": false,
"searchable": false//,
//"className": 'select-checkbox'
},
{
"targets": [0],
"visible": false,
"searchable": false
},
{
"targets": [6],
"searchable": false,
"orderable": false
}
]
});
// Evento en boton para agregar materiales
entrega.form.btnAgregar.on('click', entrega, agregarMaterial);
// Agrego la entrega al pedido (variable global)
pedido.entregas.push(entrega);
// Eventos de selección materiales en el DataTable
entrega.materiales.on('select.dt', entrega, tablaMaterialesSelectHandler);
entrega.materiales.on('deselect.dt', entrega, tablaMaterialesSelectHandler);
entrega.dom.show();
}
function initTablaEjemplo(){
var tablaMateriales = $("#entrega-x-materiales-tabla");
tablaMateriales.DataTable({
dom:
"<'row'<'col-sm-12'tr>>" +
"<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
pageLength: 50,
lengthMenu: [[10, 25, 50, 100, 200, -1], [10, 25, 50, 100, 200, "Todo"]],
fixedHeader: true,
orderCellsTop: true,
processing: true,
retrieve: true,
select: {
style: 'multi'//,
//selector: 'td:first-child'
},
autoWidth: true,
order: [[ 0, 'desc' ]],
language: {
searchPlaceholder: 'Buscar...',
sProcessing: "<span style='color: white;font-size: 20px;'>CARGANDO...</span>",
sLengthMenu: "_MENU_ registros por pag.",
sZeroRecords: "No se encontraron resultados",
sEmptyTable: "No hay datos disponibles en la tabla",
sInfo: "Items del _START_ al _END_ de _TOTAL_ items",
sInfoEmpty: "",
sInfoFiltered: "",
sInfoPostFix: "",
sSearch: "",
sUrl: "",
sInfoThousands: ",",
sLoadingRecords: "Cargando...",
oPaginate: {
sFirst: "Primero",
sLast: "Último",
sNext: "Siguiente",
sPrevious: "Anterior"
},
oAria: {
sSortAscending: ": Activar para ordenar la columna de manera ascendente",
sSortDescending: ": Activar para ordenar la columna de manera descendente"
},
buttons: {
copy: "Copiar",
colvis: "Visibilidad"
},
select: {
rows: {
_: "%d items seleccionados",
0: "",
1: "1 item seleccionado"
}
}
},
columns: [
{ data: 'id' },
{ data: 'sel' },
{ data: 'codigo' },
{ data: 'nombre' },
{ data: 'cantidad' },
{ data: 'peso' },
{ data: 'acc' }
],
columnDefs: [
{
"targets": [1],
"orderable": false,
"searchable": false,
"className": 'select-checkbox'
},
{
"targets": [0],
"visible": false,
"searchable": false
},
{
"targets": [6],
"searchable": false,
"orderable": false
}
]
});
tablaMateriales.on('select', tablaMaterialesSelectHandler2);
tablaMateriales.on('deselect', tablaMaterialesSelectHandler2);
// Boton de agregar materiales
$("#btn-agregar-material").on('click', function (){
var tablaMateriales = $("#entrega-x-materiales-tabla").DataTable();
var material = {
id: $("#material-id").val(),
codigo: $("#material-codigo").val(),
nombre: $("#material-nombre").val(),
cantidad: $("#material-cantidad").val(),
peso: $("#material-peso").val(),
acc: " ",
sel: ""
};
tablaMateriales
.row.add(material)
.draw(false);
});
// Boton eliminar materiales seleccionados
$('#btn-eliminar-material').on('click', function (){
var tablaMateriales = $("#entrega-x-materiales-tabla").DataTable();
tablaMateriales.rows('.selected')
.remove()
.draw(false);
});
//$('#btn-eliminar-material').hide();
}
$(document).ready( function () {
//initTablaEjemplo();
} );
/*
(function() {
var url = 'https://debug.datatables.net/bookmarklet/DT_Debug.js';
if (typeof DT_Debug != 'undefined') {
if (DT_Debug.instance !== null) {
DT_Debug.close();
} else {
new DT_Debug();
}
} else {
var n = document.createElement('script');
n.setAttribute('language', 'JavaScript');
n.setAttribute('src', url + '?rand=' + new Date().getTime());
document.body.appendChild(n);
}
})();
*/
You can jump to the latest bin by adding /latest
to your URL
Shortcut | Action |
---|---|
ctrl + [num] | Toggle nth panel |
ctrl + 0 | Close focused panel |
ctrl + enter | Re-render output. If console visible: run JS in console |
Ctrl + l | Clear the console |
ctrl + / | Toggle comment on selected lines |
ctrl + [ | Indents selected lines |
ctrl + ] | Unindents selected lines |
tab | Code complete & Emmet expand |
ctrl + s | Save & lock current Bin from further changes |
ctrl + shift + s | Clone Bin |
ctrl + y | Archive Bin |
Complete list of JS Bin shortcuts |
URL | Action |
---|---|
/ | Show the full rendered output. This content will update in real time as it's updated from the /edit url. |
/edit | Edit the current bin |
/watch | Follow a Code Casting session |
/embed | Create an embeddable version of the bin |
/latest | Load the very latest bin (/latest goes in place of the revision) |
/[username]/last | View the last edited bin for this user |
/[username]/last/edit | Edit the last edited bin for this user |
/[username]/last/watch | Follow the Code Casting session for the latest bin for this user |
/quiet | Remove analytics and edit button from rendered output |
.js | Load only the JavaScript for a bin |
.css | Load only the CSS for a bin |
Except for username prefixed urls, the url may start with http://jsbin.com/abc and the url fragments can be added to the url to view it differently. |