Как бы я мог предотвратить обновление страницы при нажатии кнопки «Отправить» без данных в полях?
Проверка правильности установки работает нормально, все поля становятся красными, но затем страница немедленно обновляется. Мои знания JS относительно базовы.
В частности, я думаю, что processForm()
функция внизу «плохая».
HTML
<form id="prospects_form" method="post">
<input id="form_name" tabindex="1" class="boxsize" type="text" name="name" placeholder="Full name*" maxlength="80" value="" />
<input id="form_email" tabindex="2" class="boxsize" type="text" name="email" placeholder="Email*" maxlength="100" value="" />
<input id="form_subject" class="boxsize" type="text" name="subject" placeholder="Subject*" maxlength="50" value="FORM: Row for OUBC" />
<textarea id="form_message" class="boxsize" name="message" placeholder="Message*" tabindex="3" rows="6" cols="5" maxlength="500"></textarea>
<button id="form_send" tabindex="5" class="btn" type="submit" onclick="return processForm()">Send</button>
<div id="form_validation">
<span class="form_captcha_code"></span>
<input id="form_captcha" class="boxsize" type="text" name="form_captcha" placeholder="Enter code" tabindex="4" value="" />
</div>
<div class="clearfix"></div>
</form>
JS
$(document).ready(function() {
// Add active class to inputs
$("#prospects_form .boxsize").focus(function() { $(this).addClass("hasText"); });
$("#form_validation .boxsize").focus(function() { $(this).parent().addClass("hasText"); });
// Remove active class from inputs (if empty)
$("#prospects_form .boxsize").blur(function() { if ( this.value === "") { $(this).removeClass("hasText"); } });
$("#form_validation .boxsize").blur(function() { if ( this.value === "") { $(this).parent().removeClass("hasText"); } });
///////////////////
// START VALIDATION
$("#prospects_form").ready(function() {
// DEFINE GLOBAL VARIABLES
var valName = $('#form_name'),
valEmail = $("#form_email"),
valEmailFormat = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
valMsg = $('#form_message'),
valCaptcha = $('#form_captcha'),
valCaptchaCode = $('.form_captcha_code');
// Generate captcha
function randomgen() {
var rannumber = "";
// Iterate through 1 to 9, 4 times
for(ranNum=1; ranNum<=4; ranNum++){ rannumber+=Math.floor(Math.random()*10).toString(); }
// Apply captcha to element
valCaptchaCode.html(rannumber);
}
randomgen();
// CAPTCHA VALIDATION
valCaptcha.blur(function() {
function formCaptcha() {
if ( valCaptcha.val() == valCaptchaCode.html() ) {
// Incorrect
valCaptcha.parent().addClass("invalid");
return false;
} else {
// Correct
valCaptcha.parent().removeClass("invalid");
return true;
}
}
formCaptcha();
});
// Remove invalid class from captcha if typing
valCaptcha.keypress(function() {
valCaptcha.parent().removeClass("invalid");
});
// EMAIL VALIDATION (BLUR)
valEmail.blur(function() {
function formEmail() {
if (!valEmailFormat.test(valEmail.val()) && valEmail.val() !== "" ) {
// Incorrect
valEmail.addClass("invalid");
} else {
// Correct
valEmail.removeClass("invalid");
}
}
formEmail();
});
// Remove invalid class from email if typing
valEmail.keypress(function() {
valEmail.removeClass("invalid");
});
// VALIDATION ON SUBMIT
$('#prospects_form').submit(function() {
console.log('user hit send button');
// EMAIL VALIDATION (SUBMIT)
function formEmailSubmit() {
if (!valEmailFormat.test(valEmail.val())) {
// Incorrect
valEmail.addClass("invalid");
} else {
// Correct
valEmail.removeClass("invalid");
}
}
formEmailSubmit();
// Validate captcha
function formCaptchaSubmit() {
if( valCaptcha.val() === valCaptchaCode.html() ) {
// Captcha is correct
} else {
// Captcha is incorrect
valCaptcha.parent().addClass("invalid");
randomgen();
}
}
formCaptchaSubmit();
// If NAME field is empty
function formNameSubmit() {
if ( valName.val() === "" ) {
// Name is empty
valName.addClass("invalid");
} else {
valName.removeClass("invalid");
}
}
formNameSubmit();
// If MESSAGE field is empty
function formMessageSubmit() {
if ( valMsg.val() === "" ) {
// Name is empty
valMsg.addClass("invalid");
} else {
valMsg.removeClass("invalid");
}
}
formMessageSubmit();
// Submit form (if all good)
function processForm() {
if ( formEmailSubmit() && formCaptchaSubmit() && formNameSubmit() && formMessageSubmit() ) {
$("#prospects_form").attr("action", "/clients/oubc/row-for-oubc-send.php");
$("#form_send").attr("type", "submit");
return true;
} else if( !formEmailSubmit() ) {
valEmail.addClass("invalid");
return false;
} else if ( !formCaptchaSubmit() ) {
valCaptcha.parent().addClass("invalid");
return false;
} else if ( !formNameSubmit() ) {
valName.addClass("invalid");
return false;
} else if ( !formMessageSubmit() ) {
valMsg.addClass("invalid");
return false;
} else {
return false;
}
}
});
});
// END VALIDATION
/////////////////
});
javascript
jquery
html
forms
M_Willett
источник
источник
var form = document.getElementById("myForm"); function handleForm(event) { event.preventDefault(); } form.addEventListener('submit', handleForm);
И я понятия не имею, как правильно отформатировать комментарий, кажется.event.preventDefault();
в вашу форму код обработки отправки. Однострочный вариант того, что я вставил в свой другой комментарий (в основном такой же, как и в версии jQuery): «document.getElementById("prospects_form").addEventListener('submit', function(event){event.preventDefault();});
Может быть способ сделать это короче (не используяaddEventListener()
, но кажется, что такие способы обычно не одобряются»). на.Добавьте этот код onsubmit = "return false":
Это исправило это для меня. Он все равно будет запускать указанную вами функцию onClick
источник
Заменить тип кнопки на
button
:источник
button type="submit"
он отправил форму с действием кнопки, используя jQuery.Вы можете использовать этот код для отправки формы без обновления страницы. Я сделал это в моем проекте.
источник
Один из отличных способов предотвратить перезагрузку страницы при отправке с использованием формы - добавление
return false
с атрибутом onsubmit.источник
action='#'
action="#"
потому что он не работает и не является подходящим решением. Ключ на самом делеonsubmit="yourJsFunction();return false"
Эта проблема становится более сложной, когда вы предоставляете пользователю 2 возможности для отправки формы:
В таком случае вам понадобится функция, которая обнаружит нажатую клавишу, в которой вы отправите форму, если нажата клавиша Enter.
А теперь возникает проблема с IE (в любом случае, версия 11). Примечание. Эта проблема не существует ни в Chrome, ни в FireFox!
Несмотря на то, что решение выглядит тривиально, мне нужно много часов, чтобы решить эту проблему, поэтому я надеюсь, что оно может быть полезным для других людей. Это решение было успешно протестировано, в частности, на IE (v 11.0.9600.18426), FF (v 40.03) и Chrome (v 53.02785.143 m 64 бит)
Исходный код HTML & JS находится во фрагменте. Принцип описан там. Предупреждение:
Если вы столкнулись с этой проблемой, просто скопируйте / вставьте код js в свою среду и адаптируйте его к своему контексту.
источник
В чистом Javascript используйте:
e.preventDefault()
e.preventDefault()
используется в jquery, но работает в javascript.источник
Большинство людей будут препятствовать отправке формы, вызывая
event.preventDefault()
функцию.Другой способ - удалить атрибут onclick кнопки и вывести код
processForm()
,.submit(function() {
посколькуreturn false;
форма не будет отправлена. Кроме того, заставьтеformBlaSubmit()
функции возвращать логическое значение, основанное на достоверности, для использования вprocessForm();
katsh
Ответ тот же, просто легче переварить.(Кстати, я новичок в stackoverflow, дайте мне руководство, пожалуйста.)
источник
return false;
также останавливает событие от бурлит в DOM - это сокращенноеevent.preventDefault(); event.stopPropagation();
Наилучшим решением является вызов любой функции onsubmit независимо от того, что вы хотите, и возвращение false после нее.
источник
Лично мне нравится проверять форму при отправке и, если есть ошибки, просто вернуть false.
http://jsfiddle.net/dfyXY/
источник
источник
Если вы хотите использовать Pure Javascript, следующий фрагмент будет лучше, чем что-либо еще.
Предположим :
HTML :
Надеюсь, что это работает для Вас!
источник
Не проверял как это работает. Вы также можете связать (это), чтобы он работал как jquery ajaxForm
используйте это как:
он возвращает узлы, так что вы можете сделать что-то вроде отправки я выше пример
так далеко от совершенства, но это должно работать, вы должны добавить обработку ошибок или удалить условие отключения
источник
Просто используйте «javascript:» в вашем атрибуте действия формы, если вы не используете действие.
источник
Иногда e.preventDefault (); работает тогда разработчики довольны но иногда не работают тогда разработчики печальны тогда я нашел решение почему иногда не работает
первый код иногда работает
второй вариант почему не работает? Это не работает, потому что jquery или другая библиотека javascript не загружаются должным образом, вы можете проверить в консоли, что все файлы jquery и javascript загружены правильно или нет.
Это решает мою проблему. Я надеюсь, что это будет полезно для вас.
источник
По моему мнению, большинство ответов пытаются решить проблему, заданную по вашему вопросу, но я не думаю, что это лучший подход для вашего сценария.
А
.preventDefault()
действительно не обновляет страницу. Но я думаю, что простыеrequire
поля, которые вы хотите заполнить данными, решат вашу проблему.Обратите внимание на
require
тег, добавленный в конце каждогоinput
. Результат будет таким же: не обновлять страницу без каких-либо данных в полях.источник
Надеюсь это будет последний ответ