Überprüfen der Eingabe in JavaScript vor dem Senden an das Back-End
Ich bin ein Anfänger in der Programmierung. Mein Code enthält viele Fehler und jede Hilfe ist willkommen. Zuerst versuche ich, eine Funktion in die JavaScript-Datei zu schreiben, in der die Daten an das Back-End gesendet werden. Ich habe ein Snippet an mein Front-End gesendet, um zu veranschaulichen, was ich erreichen möchte.
Grundsätzlich möchte ich einige Daten senden, aber bevor das Back-End die Daten empfängt, möchte ich die Daten validieren und einen Fehler an den Benutzer senden, der darüber informiert, was mit dem Eingabefeld nicht stimmt.
Die Menge (indivQty) sollte NUR int größer als 0 und kleiner als die stockIndivQty sein.
Funktion zum Senden / Speichern der Daten:
async function saveTransfer(){
//ID (inventorylocation table)
let invLocId = document.querySelector('#itemID span').textContent;
console.log('invLocId: '+invLocId);
// Item SKU
let customSku = document.querySelector('#sku span').textContent;
console.log('itemSku: '+customSku);
// Type
let invType = document.querySelector('#type span').textContent;
console.log('type: '+invType);
// InvID
let invId = document.querySelector('#invID span').textContent;
console.log('Inventory ID: '+invId);
let stockIndivQty = document.querySelector('#indivQty span').textContent;
let trs = document.querySelectorAll('.rows .row');
let locations = [];
for(let tr of trs) {
let location = {};
location.indivQty = tr.querySelector('.quantity').value;
location.locationName = tr.querySelector('.input-location').value;
locations.push(location);
}
console.log('locations: '+locations);
let formData = new FormData();
formData.append('invLocId', invLocId);
formData.append('customSku', customSku);
formData.append('locations', JSON.stringify(locations));
formData.append('invType', invType);
formData.append('invId', invId);
let response = await fetch(apiServer+'itemTransferBay/update', {method: 'POST', headers: {'DC-Access-Token': page.userToken}, body: formData});
let responseData = await response.json();
if (!response.ok || responseData.result != 'success') {
window.alert('ERROR');
} else {
window.alert('teste');
location.reload();
}
}
window.addEventListener("load", () => {
let elTotalQuantity = document.querySelector("#totalqty");
let totalQuantity = parseInt(elTotalQuantity.innerHTML);
function getSumOfRows() {
let sum = 0;
for (let input of document.querySelectorAll("form .row > input.quantity"))
sum += parseInt(input.value);
return sum;
}
function updateTotalQuantity() {
elTotalQuantity.innerHTML = totalQuantity - getSumOfRows();
}
function appendNewRow() {
let row = document.createElement("div");
row.classList.add("row");
let child;
// input.quantity
let input = document.createElement("input");
input.classList.add("quantity");
input.value = "0";
input.setAttribute("readonly", "");
input.setAttribute("type", "text");
row.append(input);
// button.increment
child = document.createElement("button");
child.classList.add("increment");
child.innerHTML = "+";
child.setAttribute("type", "button");
child.addEventListener("click", () => {
if (getSumOfRows() >= totalQuantity) return;
input.value++;
updateTotalQuantity();
});
row.append(child);
// button.increment
child = document.createElement("button");
child.classList.add("decrement");
child.innerHTML = "-";
child.setAttribute("type", "button");
child.addEventListener("click", () => {
if (input.value <= 0) return;
input.value--;
updateTotalQuantity();
});
row.append(child);
// label.location
child = document.createElement("label");
child.classList.add("location-label");
child.innerHTML = "Location: ";
row.append(child);
// input.location
let input2 = document.createElement("input");
input2.classList.add("input-location");
input2.value = "";
input2.setAttribute("type", "text");
row.append(input2);
// button.remove-row
child = document.createElement("button");
child.classList.add("remove-row");
child.innerHTML = "Remove";
child.setAttribute("type", "button");
child.addEventListener("click", () => {
row.remove();
updateTotalQuantity();
});
row.append(child);
document.querySelector("form .rows").append(row);
}
document.querySelector("form .add-row").addEventListener("click", () => appendNewRow());
appendNewRow();
});
<form>
<label>Total Quantity: <span id="totalqty">10</span></label>
<br>
<div class="rows">
</div>
<button type="button" class="add-row">Add new row</button>
</form>
Antworten
Sie können die JavaScript-Funktionen verwenden parseInt()und isNaN()prüfen, ob ein Wert eine gültige Zahl ist, und dann mit einfachen if-Anweisungen prüfen, ob die Zahl innerhalb eines bestimmten Bereichs liegt.
Wenn nicht, zeigen Sie eine Benachrichtigung an, dass ein Wert falsch ist (am besten: Markieren Sie das falsche Eingabefeld) und return, um den Code nicht zu erreichen, an den Sie die Daten an das Back-End senden.
Ein Beispiel würde so aussehen:
let valueFromString = parseInt("10");
if (isNaN(valueFromString)) valueFromString = 0; // Define default value
let lowerBound = 0;
let upperBound = 20;
// Checking if valueFromString is of range [lowerBound, upperBound]; if not, 'return;'
if (valueFromString < lowerBound || valueFromString > upperBound) return;
Jetzt benötigen die meisten Werte nicht unbedingt eine zusätzliche Zuordnung zu neuen Variablen wie lowerBoundoder upperBound. Für den Zweck des Beispiels wird es hier jedoch demonstriert.