У меня есть контактная форма, созданная PHP и ajax. Я хочу, когда я нажимаю на Send Message
кнопку смены кнопки на Sending...
в пределах beforeSend
функции. Я хочу установить время на кнопку, пока не покажу мне Sending...
текст около 5 секунд. Я создал функцию SetTimeout, как показано ниже, но не работаютjQuery Ajax setTimeout в функции beforeSend во время отправки формы
Редактировать код только я добавить некоторые условные операторы в MYD done
функции и я добавил код в complete
функции
(function (jQuery, window, document, undefined) {
'use strict';
jQuery('#contactForm').submit(function(event) {
var bsnname = jQuery('#bsnname').val();
var bsnsubject = jQuery('#bsnsubject').val();
var bsnemail = jQuery('#bsnemail').val();
var bsnmessage = jQuery('#bsnmessage').val();
jQuery.ajax({
url: 'http://localhost/wp/wp-content/plugins/Yallanpe-BSN/inc/class-contact-inc.php',
type: 'POST',
data: {'bsnname': bsnname, 'bsnsubject': bsnsubject, 'bsnemail': bsnemail, 'bsnmessage': bsnmessage},
dataType: 'json',
cache: false
})
.done(function(data) {
if (!data.success) {
if(data.errors.nameEmpty) {
jQuery('#name-field').append('<em class="text-danger">' + data.errors.nameEmpty + '</em>');
} else {
jQuery('#name-field .text-danger').fadeOut(25);
if(data.errors.nameLengthErrors) {
jQuery('#name-field').append('<em class="text-danger">' + data.errors.nameLengthErrors + '</em>');
}
}
if(data.errors.subjectEmpty) {
jQuery('#subject-field').append('<em class="text-danger">' + data.errors.subjectEmpty + '</em>');
} else {
jQuery('#subject-field .text-danger').fadeOut(25);
if(data.errors.subjectLengthErrors) {
jQuery('#subject-field').append('<em class="text-danger">' + data.errors.subjectLengthErrors + '</em>');
}
}
if(data.errors.emailEmpty) {
jQuery('#email-field').append('<em class="text-danger">' + data.errors.emailEmpty + '</em>');
} else {
jQuery('#email-field .text-danger').fadeOut(25);
if(data.errors.emailFormatErrors) {
jQuery('#email-field').append('<em class="text-danger">' + data.errors.emailFormatErrors + '</em>');
}
}
if(data.errors.messageEmpty) {
jQuery('#message-field').append('<em class="text-danger">' + data.errors.messageEmpty + '</em>');
} else {
jQuery('#message-field .text-danger').fadeOut(25);
if(data.errors.messageLengthErrors) {
jQuery('#message-field').append('<em class="text-danger">' + data.errors.messageLengthErrors + '</em>');
}
}
} else {
jQuery('#success-msg').append('<p class="bg-success">Message has been sent</p>');
}
})
.fail(function(data) {
});
jQuery(document).ajaxComplete(function() {
document.getElementById("contactForm").reset();
});
event.preventDefault();
});
}(jQuery, window, document));
Я немного запутался, что вы делаете. Но setTimeout задерживает изменение на пять секунд, что кажется странным. Я бы переключил кнопку на отправку внутри beforeSend, а затем воспользовался обратным вызовом запроса ajax, чтобы изменить его на отправку или что-то в этом роде. –
Я хочу, когда я нажму кнопку «Отправить сообщение», измените текст для отправки ... покажите его примерно через 5 секунд после этого сообщения об успешном завершении. (Сообщение об успешной работе со мной правильно, но я хочу отложить его на 5 секунд) –
Почему бы вам просто не изменить текст сразу после ответа? То, что вы ищете, - это установить текст кнопки для отправки ... как у вас в коде без тайм-аута, а затем установить привязку, которая изменит ее обратно ровно на пять секунд. –