Вот. Немного подправил код и зделал его jslint и jshint-free.
Для его использования, добавьте класс
js-form
для всех форм, использующих этот сценарий, а так же
js-phone
для всех полей для ввода телефона.
P.S. Катал на коленке, если не работает или есть вопросы - дайте знать, постараюсь помочь разобраться.
$(document).ready(function() {
"use strict";
var form = $(".js-form");
form.on("submit", function(e) {
var submit = form.find(".js-submit");
// Если Вам приходится генерировать HTML
// или модифицировать какие-либо текстовые значения,
// всегда лучше вынести их в константы
var SEND = "Отправить заявку";
var SENDING = "Идет отправка...";
var SENDING_COMPLETE = "Заявка отправлена";
function validatePhone() {
var phone = form.find(".js-phone");
try {
if (phone.val().length === 0) {
throw Error("Phone number can't be empty");
}
} catch (e) {
phone.css({
"border-color": "#ff4500"
});
setTimeout(function() {
// Возвращаем значение цвета обводки в
// предыдущее состояние
phone.css({
"border-color": "auto"
});
}, 500);
return false;
}
return true;
}
if (validatePhone() === true) {
var request = $.ajax({
url: "send.php",
method: "POST",
beforeSend: function() {
submit.attr({
"disabled": true,
"value": SENDING
});
}
});
request.done(function(response) {
response = $.trim(response);
if (response === "sent") {
submit.attr({
"value": SENDING_COMPLETE
// Возможно, здесь стоит убрать флаг disabled?
});
} else {
// По идее, если что-то идет не так, Ваш скрипт должен
// выкидывать исключение, которое вы бы обрабатывали в
// методе fail. Но пока вы этого не сделали, придется писать через
// if-else
submit.attr({
"disabled": false,
"value": SEND
});
}
});
request.fail(function(error) {
// Когда PHP скрипт будет выкидывать ошибку, вы будете обрабатывать её здесь.
console.error(error);
});
}
// Предотвращаем стандартную обработку форму
e.preventDefault();
});
});