Отправлятся пустые формы [закрыт]

142
21 января 2020, 08:30
Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он соответствовал тематике «Stack Overflow на русском».

Закрыт 9 месяцев назад.

Всем доброго времени суток!

Есть таблица редактирование данных, удаление, добавление. Помогите пожалуйста понять, куда вставить условие, чтобы при нажатии на кнопку отправки новой записи (в таблицу), ничего не происходило.

На данный момент, при пустых инпутах, в таблицу добавляется строка с пустыми данными. Requred в input не сработал.

(function() { 
  'use strict'; 
 
  var userData = [{ 
 
      name: 'Soaf', 
      quantity: '3', 
      price: '150', 
    }, 
    { 
      name: 'Cup', 
      quantity: '10', 
      price: '59', 
    }, 
    { 
      name: 'Chair', 
      quantity: '2', 
      price: '459', 
    }, 
    { 
      name: 'Table', 
      quantity: '2', 
      price: '19444', 
    }, 
    { 
      name: 'Bin', 
      quantity: '2', 
      price: '1843', 
    }, 
    { 
      name: 'Bear', 
      quantity: '8', 
      price: '3489', 
    }, 
    { 
      name: 'Phone', 
      quantity: '4', 
      price: '16843', 
    } 
 
  ]; 
  // Обновить таблицу в соответствии с данными 
  var updateTable = function() { 
    var dataTable = document.getElementById('table1'), 
      tableHead = document.getElementById('table-head'), 
      tbody = document.createElement('tbody'); 
 
    while (dataTable.firstChild) { 
      dataTable.removeChild(dataTable.firstChild); 
    } 
 
    dataTable.appendChild(tableHead); 
 
    for (var i = 0; i < userData.length; i++) { 
      var tr = document.createElement('tr'), 
        td0 = document.createElement('td'), 
        td1 = document.createElement('td'), 
        td2 = document.createElement('td'), 
        td3 = document.createElement('td'), 
        td4 = document.createElement('td'), 
        btnDelete = document.createElement('input'), 
        btnEdit = document.createElement('input'); 
 
      btnDelete.setAttribute('type', 'button'); 
      btnDelete.setAttribute('value', 'Delete'); 
      btnDelete.setAttribute('class', 'btnDelete'); 
      btnDelete.setAttribute('id', i); 
 
      btnEdit.setAttribute('type', 'button'); 
      btnEdit.setAttribute('value', 'Edit'); 
      btnEdit.setAttribute('id', i); 
 
      tr.appendChild(td0); 
      tr.appendChild(td1); 
      tr.appendChild(td2); 
      tr.appendChild(td3); 
      tr.appendChild(td4); 
 
      td0.innerHTML = userData[i].name; 
      td1.innerHTML = userData[i].quantity; 
      td2.innerHTML = userData[i].price; 
      td3.appendChild(btnEdit); 
      td4.appendChild(btnDelete); 
 
 
      btnDelete.onclick = (function() { 
        return function() { 
          if (confirm("Вы уверены что хотите удалить?")) { 
            var deleteId = this.getAttribute('id'); 
            userData.splice(deleteId, 1); 
            updateTable(); 
            refreshForm(); 
          } 
        }; 
      })(); 
 
      btnEdit.addEventListener('click', function() { 
        var editId = this.getAttribute('id'); 
        window.scrollTo({ 
          top: 0, 
          left: 0, 
          behavior: 'smooth' 
        }); 
        updateForm(editId); 
      }, false); 
 
      tbody.appendChild(tr); 
    } 
    dataTable.appendChild(tbody); 
  } 
 
  // Задаю форму для редактирования данных 
  var updateForm = function(id) { 
    console.log(userData[id].name); 
    var quantityField = document.getElementById('quantity'), 
      nameField = document.getElementById('name'), 
      priceField = document.getElementById('price'), 
      saveButton = document.getElementById('btnSave'); 
 
    quantityField.value = userData[id].quantity; 
    nameField.value = userData[id].name; 
    priceField.value = userData[id].price; 
    saveButton.value = 'Update'; 
    saveButton.setAttribute('data-update', id); 
  } 
 
  // Сохраняю новые данные 
  var saveData = function() { 
    var 
      newQuantity = document.getElementById('quantity').value, 
      newName = document.getElementById('name').value, 
      newprice = document.getElementById('price').value, 
      datatoAdd = { 
        quantity: newQuantity, 
        name: newName, 
        price: newprice 
      }; 
 
    userData.push(datatoAdd); 
    updateTable(); 
  } 
 
  // Обновляю данные 
  var updateData = function(id) { 
    var 
      upQuantity = document.getElementById('quantity').value, 
      upName = document.getElementById('name').value, 
      upprice = document.getElementById('price').value; 
 
    userData[id].quantity = upQuantity; 
    userData[id].name = upName; 
    userData[id].price = upprice; 
    updateTable(); 
  } 
 
  // Обновить форму 
  var refreshForm = function() { 
    var 
      quantityField = document.getElementById('quantity'), 
      nameField = document.getElementById('name'), 
      priceField = document.getElementById('price'), 
      saveButton = document.getElementById('btnSave'); 
 
    quantityField.value = ''; 
    nameField.value = ''; 
    priceField.value = ''; 
    saveButton.value = 'add'; 
    saveButton.removeAttribute('data-update'); 
  } 
 
  // Главные функции 
  var init = function() { 
    updateTable(); 
    var btnSave = document.getElementById('btnSave'), 
      btnRefresh = document.getElementById('btnRefresh'); 
 
    btnSave.onclick = function() { 
      if (btnSave.getAttribute('data-update')) { 
        updateData(btnSave.getAttribute('data-update')); 
      } else { 
        saveData(); 
      } 
      refreshForm(); 
    }; 
 
    btnRefresh.onclick = function() { 
      refreshForm(); 
    }; 
  }; 
 
  init(); //Инициализация таблицы 
})();
<table class="table" id="table1"> 
  <thead id="table-head"> 
    <tr> 
      <th class="table-th__name"><input onclick='sortTableName()' type="checkbox" id="stateInput3"> 
        <label for="stateInput3" class="arrows3"></label>Name</th> 
      <th class="table-th__quantity">Quantity</th> 
      <th class="table-th__price"> <input onclick='sortTable(2)' type="checkbox" id="stateInput2"> 
        <label for="stateInput2" class="arrows2"></label>Price</th> 
      <th class="table-th__action">Action</th> 
      <th class="table-th__none"></th> 
    </tr> 
  </thead> 
</table> 
 
<div class="form-container"> 
  <form class="form"> 
    <input type="text" maxlength="15" id="name" name="name" placeholder="Name" required /> 
    <input type="text" maxlength="15" id="quantity" name="quantity" placeholder="Quantity" required /> 
    <input type="text" maxlength="15" id="price" name="price" placeholder="Price" required /> 
    <input type="submit" value="Add" id="btnSave" required /> 
  </form> 
</div>

Answer 1

Тебе нужно убрать обработчик onlick с кнопки и добавить обработчик на форму(событие onsubmit) также не забудь прописать строчку e.preventDefault() в обработчике

READ ALSO
Чем заменить iframe?

Чем заменить iframe?

Ситуация проста: есть некий html-код, который должен выводиться юзеруНо код этот может генерировать кто угодно, поэтому я использую iframe в режиме...

162
Vue.js вывод сообщения при не найденных данных

Vue.js вывод сообщения при не найденных данных

Вопрос такой, есть цикл при котором мы выводим все что нашли в массиве

113
Наведение курсора на ячейку таблицы JS

Наведение курсора на ячейку таблицы JS

Как при наведении на ячейку таблицы с числами в JS подсветить еще например 3 ячейки, близких по значению к основной? Меня интересует не готовое...

114
Удалить лишнюю переменную в цикле switch-case

Удалить лишнюю переменную в цикле switch-case

Имеется презентацияНа 2 слайде в консоли отладки для более удобной отладки отображается переменная i2 и какой "case" сработал в цикле switch-case

142