Как запретить отправку формы, если хотя бы одно поле не заполнено?
Вешаешь обработчик на событие sumbit. 
Добавляешь   evt.preventDefault(), чтобы остановить отправку формы.
Делаешь валидацию и оповещение пользователя (как пример alert).
Отправляешь формы через js (this.submit()).const form = document.querySelector('#form');
const email = document.querySelector('#email');
const name = document.querySelector('#name');
form.addEventListener('submit', function(evt) {
  evt.preventDefault();
  if(!name.value) {
    alert('Поле имя не заполнено');
    return;
  }
  
  if(!email.value) {
    alert('Поле email не заполнено');
    return;
  }
  
  this.submit();
});
Например вот такsnippet