Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как вставить правильно функцию? (https://javascript.ru/forum/misc/47092-kak-vstavit-pravilno-funkciyu.html)

Iceman77 08.05.2014 11:48

Как вставить правильно функцию?
 
Вот есть первый код, который отвечает за проверку поля 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 08.05.2014 12:48

Помогите, очень срочно нужно(

M-ka 08.05.2014 13:01

Iceman77,
вынеси ф-ю валидации мейла отдельным обработчиком, а его запускай по блюру или чему там тебе нужно с любого места....
if($(this).val() != '') {var pattern ........ $('#valid').text('Поле email не должно быть пустым'); ....... --- в отдельную ф-ю

Iceman77 08.05.2014 13:06

Я в этом не особо понимаю. По этому прошу помощи тут)

M-ka 08.05.2014 14:30

$(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_ 08.05.2014 15:07

Цитата:

Сообщение от Iceman77
Помогите, очень срочно нужно(

надо сдать работу и получить деньги

Цитата:

Сообщение от Iceman77
Я в этом не особо понимаю. По этому прошу помощи тут)

поэтому хочу, чтобы за меня сделали на халяву

---
я так это читаю

M-ka 08.05.2014 15:27

nerv_,
+1, где то уже писали подобное
С наличием ответа, думаю его больше не увидим на форуме...


Часовой пояс GMT +3, время: 11:51.