Подтвердить что ты не робот

Почему jQuery Validation добавляет атрибут noValidate?

В настоящее время я использую:

<script src="//code.jquery.com/jquery-1.10.2.min.js"></script>
<script src="//code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
<script src="../js/bootStrap/js/bootstrap.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/additional-methods.min.js"></script>

с проверкой, например:

j$('.delValidate').each(function(){

j$(this).validate({
    rules:{
        delivery_Method:{
            required: true
        }
    },
    message:{
        delivery_Method:{
            required: true
        }
    }
});

});

    j$('.validateUser').each(function(){
        j$(this).validate({
            rules:{
                f_Name:{
                    required: true
                },
                l_Name:{
                    required: true  
                },
                username:{
                    required: true,
                    minlength: 6
                },
                password: {
                    validChars: true,
                    noSpace: true,
                    minlength: 6,
                    skip_or_fill_minimum: [3,".pw"]
                },
                confPass: {
                    equalTo: "#password",
                    skip_or_fill_minimum: [3,".pw"]
                }           
            }
        });
    });

HTML-фрагмент:

<form class="form-horizontal delValidate" action="#" method="post">
<input type="hidden" name="formIdentifier" value="addDel" />
<div class="form-group">
    <div class="col-sm-3">
        <input type="text" name="delivery_Method" class="form-control" placeholder="Enter new method" />
    </div>
    <div class="col-sm-2 col-sm-offset-2">
        <button type="submit"  class="btn btn-default btn-block">Add</button>
    </div>
</div>
</form>

Но когда я перехожу на свою страницу, моя форма визуализируется с атрибутом noValidate и поэтому я могу вставлять нулевые/пустые значения в базу данных. Каковы причины этого? Нужно ли настраивать форму определенным образом? Является ли проверка JQuery причиной чего-то неправильным и поэтому не работает? Моя грязная работа:

j$(this).removeAttr('novalidate');
4b9b3361

Ответ 1

Атрибут novalidate просто указывает браузеру отключить встроенную проверку HTML5 или игнорировать любые атрибуты проверки HTML5, которые вы, возможно, использовали.

Плагин jQuery Validate динамически добавляет атрибут novalidate, потому что, установив его, вы решили разрешить проверку плагина вместо HTML5.

Ни один из этих двух методов, JavaScript (jQuery) или HTML5, недостаточно хорош для защиты вашей базы данных. У вас всегда должна быть какая-то проверка на стороне сервера, когда проверка на стороне клиента завершается с ошибкой, отключена или обойдена пользователем/браузером.

Цитата OP:

"Моя форма визуализируется с атрибутом noValidate и поэтому я могу вставлять нулевые/пустые значения в базу данных".

Похоже, что что-то очень не так с тем, как вы используете плагин jQuery Validate, а атрибут novalidate не является основной причиной.

Если важно, что вы не можете ввести данные null, для предотвращения этого вам понадобится код проверки данных на стороне сервера. Вы никогда не должны полагаться на клиентский код для защиты базы данных, так как все клиентские коды можно легко обойти.

"В чем причина этого?"

Как объяснялось выше. Это нормально и желательно. Плагин просто использует novalidate, чтобы выполнить проверку на стороне клиента из браузера (HTML5).

Если у вас нет атрибутов проверки HTML5, атрибут novalidate или отсутствие атрибута novalidate ничего не делает. Другими словами, он только переключает проверку HTML5, если вы используете атрибуты проверки HTML5.

"Нужно ли настраивать форму определенным образом?"

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

"Моя грязная работа использует: .removeAttr('novalidate')"

В зависимости от вашей разметки это не является умным или полностью излишним. Фактически, вы потенциально допускаете проверку HTML5 одновременно с плагином jQuery Validate. Выберите один или другой для проверки на стороне клиента.


ИЗМЕНИТЬ

С тех пор OP добавила некоторую HTML-разметку в вопрос.

Плагин jQuery Validate работает точно так, как ожидалось: http://jsfiddle.net/tv7Bz/