#javascript #html #node.js #forms #ejs
Вопрос:
Я пытаюсь создать диалоговое окно подтверждения, используя что-то вроде этого: confirm('Are you sure?')
внутри моей формы EJS, но я не знаю, где и как заставить ее работать правильно.
Вот код, который у меня есть до сих пор для моего шаблона EJS:
<div id="popupAddUser" class="addUser">
<div class="card h-100">
<div class="row">
<div class="col-7"><h2>Create New User</h2></div>
</div>
<div class="card-body">
<form method="POST" id="formAddUser" action="/add-user" enctype="multipart/form-data">
<div class="container">
<div class="row">
<div class="col-xl-5 float-right">
<div class="form-group">
<input class="form-control" type="text" placeholder="Type a User name"
name="create_user">
</div>
<div>
<button type="submit" class="btn btn-primary float-right" form="formAddUser" onclick="checker()">Create
User
</button>
</div>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
<script>
function checker(){
if( confirm("Are you sure you want to create a new User in the database?")){
continue;
}else{
break;
}
}
</script>
Я знаю, что функция checker() расположена неправильно или даже необходима, но я не уверен, что есть другой способ сделать это. Когда я нажимаю кнопку Создать пользователя, должно появиться диалоговое окно подтверждения и спросить меня, уверен ли я, что хочу создать пользователя. Если я выберу «Да», он должен отправить форму, но если я нажму «Отмена», он не должен отправлять запрос на публикацию формы
Ответ №1:
Вы можете использовать функцию JavaScript submit()
для удаленной отправки формы в зависимости от ответа. Это означало бы, что вместо кнопки «Отправить» вам придется использовать обычную кнопку.
function checker(){
if(window.confirm("Are you sure")){
document.getElementById("formAddUser").submit();
} else {
return;
}
}
<div id="popupAddUser" class="addUser">
<div class="card h-100">
<div class="row">
<div class="col-7"><h2>Create New User</h2></div>
</div>
<div class="card-body">
<form method="POST" id="formAddUser" action="/add-user" enctype="multipart/form-data">
<div class="container">
<div class="row">
<div class="col-xl-5 float-right">
<div class="form-group">
<input class="form-control" type="text" placeholder="Type a User name"
name="create_user">
</div>
<div>
<button type="button" class="btn btn-primary float-right" form="formAddUser" onclick="checker()">Create
User
</button>
</div>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
Обратите внимание, что тип кнопки установлен на button
, а не submit
для предотвращения обновления страницы после запуска функции.
Комментарии:
1. Спасибо, ты спасаешь мне жизнь 🙂 Я понятия не имел, что мне нужно было установить тип кнопки на кнопку, а не отправлять
Ответ №2:
Я удивлен, что ваш текстовый редактор не жаловался на оператор continue и break в вашем заявлении if-else!! Я бы:
- Удалите встроенный обработчик событий onclick
- Вместо этого используйте метод addEventListener() или вызов onsubmit для элемента формы.
- Используйте метод event.preventDefault (), чтобы остановить отправку формы при нажатии кнопки отмена.
document.getElementById('form').addEventListener( 'submit', (e) => checker(e) ) function checker(e) { if(!confirm('Are you sure?')) { e.preventDefault() alert('Form was not submitted') }else { alert('New user created') } }