Tengo un formulario, el cual tiene una funcion que hace que ciertos campos se autocompleten basandose en una tabla de mi base de datos aparte.
El detalle aquí es que se implementó ahora el código QR, el cúal solo escanean una sola vez cada caja, hasta un máximo de 36, el problema es que cuando escanea la última caja, el escaner llena los campos y manda el formulario, cuando aparece la notificación de que se escaneo correctamente todo, atras se ve como se terminan de autollenar los datos, sin embargo, estos datos que se autollenaron de la última caja no se mandan al formulario.
Ahora lo que quiero es atrasar el envio al menos un segundo (que es lo que tarda en hacer el autollenado) para que los datos se manden completos.
<form method="post" name="crear-in" id="crear_in" action="modelo-in.php" onsubmit="return validar();">
<!-- Los datos se pueden desplegar hasta 40 veces -->
<?php
for ($i = 1; $i <= $n; $i++) { ?>
<tr class="fila-fija">
<input type="hidden" style="width : 140px;" id="customer<?php echo ($i); ?>" required name="customer[]" placeholder="customer" />
<input type="hidden" id="folio<?php echo ($i); ?>" name="folio[]" value="<?php echo $f; ?>">
<td><input type="text" style="width : 25px;" id="customer<?php echo ($i); ?>" value="<?php echo ($i); ?>" disabled /></td>
<td><input onchange="consult(), validarskmx(this);" type="text" style="width : 90px;" id="skmx_pn<?php echo ($i); ?>" required name="skmx_pn[]" placeholder="SKMX PN" /></td>
<td><input type="text" style="width : 180px;" id="description<?php echo ($i); ?>" required name="description[]" placeholder="Description" readonly /></td>
<td><input type="text" style="width : 90px;" id="customer_pn<?php echo ($i); ?>" required name="customer_pn[]" placeholder="Customer PN" readonly /></td>
<td><input onchange='return validarSO(this)' type="text" style="width : 120px;" id="shop_order<?php echo ($i); ?>" required name="shop_order[]" placeholder="# Shop Order" /></td>
<td><input type="text" style="width : 70px;" id="po<?php echo ($i); ?>" required name="po[]" placeholder="# P.O." readonly></td>
<td><input onchange='return validarQT(this)' class="quantity" type="text" style="width : 60px;" id="quantity<?php echo ($i); ?>" required name="quantity[]" placeholder="Quantity" /></td>
<td><input onchange='return validarLOTE(this)' type="text" style="width : 100px;" id="lote<?php echo ($i); ?>" required name="lote[]" placeholder="Lote" /></td>
<td><input type="text" style="width : 60px;" id="location<?php echo ($i); ?>" required name="location[]" placeholder="Location" value="PASILLO" readonly /></td>
<td><input type="text" style="width : 60px;" id="incoming<?php echo ($i); ?>" required name="incoming[]" placeholder="" readonly /></td>
</tr>
<?php } ?>
<!-- </table> -->
<div class="box-footer">
<br>
<input type="hidden" name="registro" value="nuevo">
<button type="submit" id="btn-in-out" class="btn btn-primary btn-lg">Crear</button>
<a href="in-out.php" class="btn btn-danger btn-lg">Cancelar</a>
</div>
</form>
Aquí mi función de autollenado.
function consult() {
$.ajax({
url: "consulta.php",
type: "POST",
dataType: "json",
success: function(data) {
cambioOpciones(data);
}
})
}
function cambioOpciones(data) {
let id_cpn1 = document.getElementById('skmx_pn1').value;
if (id_cpn1 = 'skmx_pn1') {
// Obtener y almacenar el valor de skmx_pn
let id_cpn1 = document.getElementById('skmx_pn1').value;
//Buscar el elemento en arreglo de datos
let item = data.find(element => element[1] == id_cpn1);
//Verificar que se encontró el elmento.
if (typeof item == 'undefined' || !item) {
console.log(`No se encontró ${id_cpn1}`);
return;
}
document.getElementById('customer1').value = item[2];
document.getElementById('customer_pn1').value = item[3];
document.getElementById('description1').value = item[4];
document.getElementById('incoming1').value = item[5];
}
Aquí manejo mi alerta cuando se termina de escanear.
$("#crear_in").on("submit", function (e) {
e.preventDefault();
var datos = $(this).serializeArray();
//Crear llamado Ajax
$.ajax({
type: $(this).attr("method"),
data: datos,
url: $(this).attr("action"),
dataType: "json",
success: function (data) {
console.log(data);
var resultado = data;
if (resultado.respuesta == "exito") {
swal("Correcto", "Se han registrado correctamente", "success");
setTimeout(function () {
window.location.href = "in-out.php";
}, 1500);
} else {
swal(
"Error!",
"El Folio ya pertenece a otra tarima, Intente nuevamente",
"error"
);
}
},
});
Espero me haya dado a entender bien, y que me puedan ayudar, si saben de alguna manera de poder hacerlo, se los agradecería mucho.