Проверка входных данных на JavaScript перед отправкой на серверную часть

#javascript #validation #input

#javascript #проверка #ввод

Вопрос:

Я новичок в программировании. В моем коде много ошибок, и любая помощь будет приветствоваться. Сначала я пытаюсь написать функцию в файле JavaScript, куда она отправляет данные на серверную часть, я разместил фрагмент в своем интерфейсе, чтобы помочь визуализировать то, чего я пытаюсь достичь.

В принципе, я хочу отправить некоторые данные, но перед тем, как серверная часть получит данные, я хотел бы проверить данные и отправить пользователю сообщение об ошибке, сообщающее, что не так с полем ввода.

Количество (indivQty) должно быть ТОЛЬКО int больше 0 и меньше stockIndivQty .

Функция для отправки / сохранения данных:

         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>  

Комментарии:

1. ваш вопрос не соответствует вашему названию, в любом случае, если я правильно понимаю, обновление и вставка работают нормально.. но функция должна только проверять, существует ли значение уже или нет. затем вставить / обновить?

2. @ash да, вопрос был неясен, поэтому я отредактировал, сосредоточив внимание на проблеме, которая у меня есть

Ответ №1:

Вы можете использовать функции JavaScript parseInt() и isNaN() проверить, является ли значение допустимым числом, а затем использовать базовые операторы if, чтобы проверить, находится ли число внутри заданного диапазона.
Если нет, то отобразите уведомление о том, что какое-то значение неверно (лучше всего: выделите неправильное поле ввода) и return , чтобы не доходить до кода, в котором вы отправляете данные на серверную часть.

Пример будет выглядеть так:

 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;
  

Теперь большинству значений не обязательно требуется дополнительное присвоение новым переменным, таким как lowerBound или upperBound . Однако для целей примера это продемонстрировано здесь.