Tengo este código Javascript donde quiero que el envío de los usuarios solo se envíe a la base de datos, cuando se completen todos los valores. El único problema es que un usuario puede ingresar una nueva fila de datos y eso debe verificarse con un bucle. Cada vez que hago clic en enviar, los datos se envían independientemente de si los campos están llenos o no. Y se repite cada vez. He intentado mover data.push(assetInfo); fuera de los corchetes y todavía imprime el envío aceptado independientemente de las veces que el usuario haga clic en enviar. ¡Cualquier ayuda sería apreciada!
$('#submit').click(() =>{ $('form').on('submit', function(e){ e.preventDefault(); //Format all Data into JSON for Submission let data = []; // Iterate over all rows and store data for (let i = 1; i <= count; i++){ // Skip Row if it was Removed if (!$(`tr[index=${i}]`).length) continue; // Store all Info from this row let assetInfo = { asset_tag_no: $(`#asset_tag_no${i}`).val(), manufacturer: $(`#manufacturer_serial_no${i}`).val(), descriptions: $(`#description${i}`).val(), costs: $(`#cost${i}`).val(), po_no: $(`#po_no${i}`).val(), remarks: $(`#remarks${i}`).val(), } if (assetInfo.asset_tag_no && assetInfo.manufacturer && assetInfo.descriptions && assetInfo.costs && assetInfo.po_no && assetInfo.remarks != ''){ alert('Submission Accepted'); } // Add Info to array data.push(assetInfo); } // Upload JSON to Database console.log(data); }); }); })No necesita mover el push fuera de los soportes. Necesitas moverlo dentro de los corchetes:
if (assetInfo.asset_tag_no && assetInfo.manufacturer && assetInfo.descriptions && assetInfo.costs && assetInfo.po_no && assetInfo.remarks != ''){ alert('Submission Accepted'); // Add Info to array data.push(assetInfo); }EDITAR
Si desea empujar una fila exactamente una vez, puede reemplazar
if (!$(`tr[index=${i}]`).length) continue;con
let currentRow = $(`tr[index=${i}]`); if ((!currentRow.length) || (currentRow.hasClass("submitted"))) continue; currentRow.addClass("submitted");