#javascript #html
Вопрос:
У меня есть Save
кнопка, которая по умолчанию отправляет форму. Однако мне нужно (в некоторых обстоятельствах, которые опущены в этом вопросе) вместо этого открыть диалоговое окно при нажатии этой Save
кнопки. Внутри этого диалогового окна Yes
кнопка вкл. отправит форму. Проблема, с которой я борюсь в настоящее время, заключается в применении функции «отправить» формы к кнопке.
form = document.getElementsByClassName('form_submit')[0];
formSubmitFunc = form.onSubmit;
// prevent the form from submitting normally, this will be done by the dialog
form.addEventListener('submit', function(event) {
event.preventDefault();
});
confirmDlgConfirmBtn.on('click', function() {
console.log('yes');
formSubmitFunc();
});
confirmDlgCancelBtn.on('click', function() {
console.log('no');
confirmDlg.hide();
})
saveButton.on('click', function() {
saveButton.disabled = false;
console.log('save');
confirmDlg.show();
});
Всякий раз , когда я нажимаю на confirmDlgConfirmBtn
, вместо отправки формы, как ожидалось, я получаю сообщение об ошибке, которое гласит:
Неперехваченная ошибка типа: o не является функцией at …
Я также попытался настроить formSubmitFunc = form.submit;
среди многих других, но, похоже, не могу выполнить функцию отправки формы по умолчанию при confirmDlgConfirmBtn
нажатии. Есть какие-нибудь идеи?
Ответ №1:
Я в основном предполагаю здесь, но я думаю, что ваша проблема заключается в
// prevent the form from submitting normally, this will be done by the dialog
form.addEventListener('submit', function(event) {
event.preventDefault();
});
Это всегда должно препятствовать отправке формы, даже если вы запускаете ее программно.
Вместо этого попробуйте предотвратить событие по умолчанию в прослушивателе нажатия кнопки. Я также не совсем уверен в том, как вы отправляете форму. Попробуйте отправить его напрямую с submit()
помощью метода
form = document.getElementsByClassName('form_submit')[0];
confirmDlgConfirmBtn.on('click', function() {
console.log('yes');
form.submit(); // using submit function
confirmDlg.hide(); // you probably also want to hide the dialog when the form is submitted
});
confirmDlgCancelBtn.on('click', function() {
console.log('no');
confirmDlg.hide();
})
saveButton.on('click', function(e) {
e.preventDefault(); // preventing the form submit here should work
saveButton.disabled = false;
console.log('save');
confirmDlg.show();
});
Комментарии:
1. Да, это был ответ, который мне был нужен, чтобы решить мою проблему. Спасибо!
Ответ №2:
Вы должны быть в состоянии сделать это только с помощью HTML, например:
<form id='myForm'>
...
</form>
<input type='submit' form='myForm'>
Ответ №3:
Вы можете сделать это с помощью jquery
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>jQuery Submit Form</title>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script>
$(document).ready(function(){
$("#saveBtn").click(function(){
$("#myForm").submit(); // Submit the form
});
});
</script>
</head>
<body>
<form action="/examples/html/action.php" method="post" id="myForm">
<label>First Name:</label>
<input type="text" name="first-name">
<button type="button" id="submitBtn">Submit Form</button>
</form>
<button type="button" id="saveBtn">Save</button>
</body>
</html>
Ознакомьтесь с документом для получения дополнительных указаний
кликните сюда