Запретить перезагрузку страницы и перенаправление на форму submit ajax / jquery

Я просмотрел все подобные сообщения, но ничего не помогает. Это то, что у меня есть

HTML:

<section> <form id="contact-form" action="" method="post"> <fieldset> <input id="name" name="name" placeholder="Name" type="text" /> <input id="email" name="email" placeholder="Email" type="text" /> <textarea id="comments" name="comments" placeholder="Message"></textarea> <div class="12u"> <a href="#" id="form-button-submit " class="button" onClick="sendForm()">Send Message</a> <a href="#" id="form-button-clear" class="button" onClick="document.getElementById('contact-form').reset()">Clear Form</a> </div> <ul id="response"></ul> </fieldset> </form> </section> 

JavaScript / JQuery:

 function sendForm() { var name = $('input#name').val(); var email = $('input#email').val(); var comments = $('textarea#comments').val(); var formData = 'name=' + name + '&email=' + email + '&comments=' + comments; $.ajax({ type: 'post', url: 'js/sendEmail.php', data: formData, success: function(results) { $('ul#response').html(results); } }); // end ajax } 

То, что я не могу сделать, – это предотвратить обновление страницы при #form-button-submit . Я попытался return false; Я попробовал preventDefault() и каждую комбинацию, включая return false; внутри onClick . Я также попытался использовать input type="button" и type="submit" вместо этого и тот же результат. Я не могу решить это, и он горит. Если вообще возможно, я предпочел бы использовать гиперссылку из-за некоторых дизайнерских вещей. Я был бы очень признателен за вашу помощь в этом.

Измените функцию следующим образом:

 function sendForm(e){ e.preventDefault(); } 

И, как говорится в комментариях, передайте событие:

 onclick = sendForm(event); 

Обновление 2:

 $('#form-button-submit').on('click', function(e){ e.preventDefault(); var name = $('input#name').val(), email = $('input#email').val(), comments = $('textarea#comments').val(), formData = 'name=' + name + '&email=' + email + '&comments=' + comments; $.ajax({ type: 'post', url: 'js/sendEmail.php', data: formData, success: function(results) { $('ul#response').html(results); } }); }); 

Вы пробовали использовать

 function sendForm(event){ event.preventDefault(); } 
 function sendForm(){ // all your code return false; } 

Я также немного занялся поиском решения этой проблемы, и пока лучший рабочий метод, который я нашел,

Попробуйте использовать XHR для отправки запроса на любой URL, а не $ .ajax () … Я знаю, это звучит немного странно, но попробуйте!
Пример-

 <form method="POST" enctype="multipart/form-data" id="test-form"> 

 var testForm = document.getElementById('test-form'); testForm.onsubmit = function(event) { event.preventDefault(); var request = new XMLHttpRequest(); // POST to any url request.open('POST', some_url, false); var formData = new FormData(document.getElementById('test-form')); request.send(formData); 

Это приведет к успешному отправке ваших данных … без перезагрузки страницы.

Простой и полный рабочий код

 <script> $(document).ready(function() { $("#contact-form").submit(function() { $("#loading").show().fadeIn('slow'); $("#response").hide().fadeOut('slow'); var frm = $('#contact-form'); $.ajax({ type: frm.attr('method'), url: 'url.php', data: frm.serialize(), success: function (data) { $('#response').html(data); $("#loading").hide().fadeOut('slow'); $("#response").slideDown(); }, error: function(jqXHR, textStatus, errorThrown){ console.log(" The following error occured: "+ textStatus, errorThrown ); } }); return false; }); }); </script> 

#loading может быть изображением или чем-то, что будет показано при обработке формы, чтобы использовать код, просто создайте форму с ID contact-form

Другой способ избежать отправки формы – это разместить кнопку вне формы. У меня был существующий код, который работал и создал новую страницу на основе рабочего кода и написал html следующим образом:

 <form id="getPatientsForm"> Enter URL for patient server <br/><br/> <input name="forwardToUrl" type="hidden" value="/WEB-INF/jsp/patient/patientList.jsp" /> <input name="patientRootUrl" size="100"></input> <br/><br/> <button onclick="javascript:postGetPatientsForm();">Connect to Server</button> </form> 

Эта форма вызывает нежелательную переадресацию, описанную выше. Изменение html на то, что показано ниже, устраняет проблему.

 <form id="getPatientsForm"> Enter URL for patient server <br/><br/> <input name="forwardToUrl" type="hidden" value="/WEB-INF/jsp/patient/patientList.jsp" /> <input name="patientRootUrl" size="100"></input> <br/><br/> </form> <button onclick="javascript:postGetPatientsForm();">Connect to Server</button> 

Я ожидаю, что кто-нибудь поймет мою идею очень хорошо, поскольку это очень простая идея.

  1. дайте свою необходимую форму самому id или вы можете получить ее любым другим способом, который вы предпочитаете.

  2. в форме введите «отправить» вызов метода onclick из вашего файла javascript.

  3. в этом методе сделайте переменную ссылкой на свой id от addEventListener и сделайте метод preventDefault на «submit» не на «click».
    Чтобы прояснить это, см. Это:

     // element refers to the form DOM after you got it in a variable called element for example: element.addEventListener('submit', (e) => { e.preventDefault(); // rest of your code goes here }); 

    Краткая идея состоит в том, чтобы разобраться с формой путем отправки события после обращения к кнопке отправки нажатием события.

Независимо от ваших потребностей внутри этого метода, он будет работать без обновления 🙂
Просто убедитесь, что имеете дело с ajax правильно, и вы закончите.

Конечно, он будет работать только с формами.