Как предотвратить скрытие сообщения об ошибке JavaScript только после первого исправления? - PullRequest
0 голосов
/ 16 февраля 2011

У меня есть форма, которая проверяет ввод пользователя. Когда пользователь нажимает кнопку отправки, и одно или несколько обязательных полей становятся пустыми, справа от поля или метки появляется сообщение «Обязательно», а сверху и снизу - общее сообщение. Кажется, это работает нормально. Однако, когда я проверяю форму путем обновления одного из пустых обязательных полей, общие сообщения исчезают, даже если другие обязательные поля остаются пустыми. Как я могу предотвратить это? Я ценю любую помощь. Спасибо - DJH

$(document).ready(function() {
$('form').submit(function(event){

var isErrorFree = true;

$('input.required, select.required, textarea.required',this).each(function(){
    if ( validateElement.isValid(this) == false ){
        isErrorFree = false;
    };
});

return isErrorFree; 
return getFocus;

}); // close .submit()

var validateElement = {

    isValid:function(element){

        var isValid = true;
        var $element = $(element);
        var id = $element.attr('id');
        var name = $element.attr('name');
        var value = $element.val();
        var hideMsg = true;

        // <input> uses type attribute as written in tag
        // <textarea> has intrinsic type of 'textarea'
        // <select> has intrinsic type of 'select-one' or 'select-multiple'
        var type = $element[0].type.toLowerCase();

        switch(type){
            case 'text':
            case 'textarea':
            case 'password':
                if ( value.length == 0 ||
value.replace(/\s/g,'').length == 0 ){ isValid = false; hideMsg = false; }
                break;
            case 'select-one':
            case 'select-multiple':
                if( !value ){ isValid = false; hideMsg = false; }
                break;
            case 'checkbox':
            case 'radio':
                if( $('input[name="' + name +
'"]:checked').length == 0 ){ isValid = false; hideMsg = false; };
                break;
        } // close switch()

        var method = isValid ? 'removeClass' : 'addClass';
        var msgStat = hideMsg ? 'removeClass' : 'addClass';


        if ( type == 'checkbox' || type == 'radio' ) {
            // if radio button or checkbox, find all inputs with the same name
            $('input[name="' + name + '"]').each(function(){
                // update each input elements <label> tag, (this==<input>)
                $('#errorMessage_' + name)[method]('showErrorMessage');
                $('#errorMessage1')[msgStat]('showErrorMessage');
                $('#errorMessage2')[msgStat]('showErrorMessage');
            });

        } else {

            // all other elements just update one <label>
            $('#errorMessage_' + name)[method]('showErrorMessage');
            $('#errorMessage1')[msgStat]('showErrorMessage');
            $('#errorMessage2')[msgStat]('showErrorMessage');
    }
        //  $('#errorMessage1')[msgStat]('showErrorMessage');
        //  $('#errorMessage2')[msgStat]('showErrorMessage');
    // after initial validation, allow elements to re-validate on change 
    $element
        .unbind('change.isValid')
        .bind('change.isValid',function(){ validateElement.isValid(this); });

        return isValid;


// close validateElement.isValid()

// close validateElement object

// close ready object

1 Ответ

0 голосов
/ 16 февраля 2011

Вам нужно специально написать собственный сценарий проверки?

Кажется, многое из того, что вы тестируете, описано в плагине проверки jQuery - http://docs.jquery.com/Plugins/Validation

Может сделать жизньлегче

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...