Как вставить правильно функцию?
Вот есть первый код, который отвечает за проверку поля email. Он работает мгновенно, когда убирается фокус.
Так- же у меня есть второй js код который проверяет вобщем все поля на заполненность. Проблема заключается, в том, что нужно подключить проверку емаил во 2 код. Что проверка не шла емали сразу как фокус убирается, а по клику кнопки оплатить.
$(document).ready(function() {
$('#email').blur(function() {
if($(this).val() != '') {
var pattern = /^([a-z0-9_\.-])+@[a-z0-9-]+\.([a-z]{2,4}\.)?[a-z]{2,4}$/i;
if(pattern.test($(this).val())){
$(this).css({'border' : '1px solid #569b44'});
$('#valid').text('Верно');
} else {
$(this).css({'border' : '1px solid #ff0000'});
$('#valid').text('Не верно');
}
} else {
$(this).css({'border' : '1px solid #ff0000'});
$('#valid').text('Поле email не должно быть пустым');
}
});
});
function trim( str, charlist ) { // аналог PHP функции trim()
charlist = !charlist ? ' \\s\xA0' : charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\$1');
var re = new RegExp('^[' + charlist + ']+|[' + charlist + ']+$', 'g');
return str.replace(re, '');
}
function checkOut() { // Наша функция
var form = '#form_pay'; // идентификатор (#id) или класс (.class) формы
var err = 8; // количество проверяемых полей, input'ов и textarea
$('input[type=text]', $(form)).each(function (indx) { // проверяем input'ы
if (trim($(this).attr('value')).length < $(this).attr('minlength')) { // проверка количества символов
$(this).attr('id', 'err'); // вешаем идентификатор #err, в качестве стилизации рамки
err++;
}
else $(this).removeAttr('id'); err--; // в этом элементе нет ошибок, чистим идентифкатор #err, уменьшаем счетчик ошибок
});
if (err==0) $(form).submit(); // Если нет ошибок - отправляем данные.
}
<input type="button" class="button_pay" value="Оплатить" onclick="checkOut()"> |
Помогите, очень срочно нужно(
|
Iceman77,
вынеси ф-ю валидации мейла отдельным обработчиком, а его запускай по блюру или чему там тебе нужно с любого места.... if($(this).val() != '') {var pattern ........ $('#valid').text('Поле email не должно быть пустым'); ....... --- в отдельную ф-ю |
Я в этом не особо понимаю. По этому прошу помощи тут)
|
$(document).ready(function() {
$('#email').blur(function() {onMailHandler();}); // запуск по событию blur (я так понял, можно выкинуть)
//$('#email').on('blur', onMailHandler); //мне так больше нравиться
});
function onMailHandler() {
var mail = $('#email'),
hasError = true;
if(mail.val() != '') {
var pattern = /^([a-z0-9_\.-])+@[a-z0-9-]+\.([a-z]{2,4}\.)?[a-z]{2,4}$/i;
if(pattern.test(mail.val())){
showMessage('Верно');
hasError = false;
} else {
showMessage('Не верно');
}
} else {
showMessage('Поле email не должно быть пустым');
}
function showMessage(mgs) {
var color = '#569b44';
if (!msg) {return;}
if (hasError) {color = '#ff0000';}
mail.css({'border' : '1px solid ' + color});
$('#valid').text(mgs);
}
return hasError;
}
onMailHandler(); -- запуск ф-ии валидации с любого доступного места, возвтращает true на ошибку... можно переименовать по вашему вкусу или сделать другой возврат для проверки, была ли ошибка... Вставить вызов перед if (err==0) $(form).submit();
if(onMailHandler()) {err++;} // увеличили счетчик при ответе с наличием ошибки... хотя в коде выше глупо чето с ним делать, просто с false заменить на true при наличии ошибки и не париться (ну или наоборот, ну как вот у меня сделано с hasError)
Вроде как то так, может че пропустил, но уже мелочи. Валидации не трогал и логику, просто разделил для более удобного чтения, правда не уверен в куске "1px solid ' + color", если цвет будет приходить но все же не ставиться, тогда сделать иф с полным прописыванием параметров ну или разделить, отдельно установив толщину, тип и цвет бордера... Просто мне не приходилось с ходу так собирать бордеры, но должно работать |
Цитата:
Цитата:
--- я так это читаю |
nerv_,
+1, где то уже писали подобное С наличием ответа, думаю его больше не увидим на форуме... |
| Часовой пояс GMT +3, время: 18:50. |