Я пытаюсь проверить свою форму, и по какой-то причине она всегда проверяет истинность, даже если я не ввожу никакого значения в поле для полей пароля. Если я изменю свой элемент управления на текст, проверка будет работать, если я ничего не введу в текстовое поле. ниже мой код. Я не могу понять, что я здесь делаю не так.

<form id="frmChangePassword" action="http://localhost/PatientAccount" method="post">
    <div class="row"><input type="password" id="txtPWD" name="txtPWD" placeholder="" style="" class="text focus" value=""></div>
    <div class="row"><input type="password" id="txtReEnterPWD" name="txtReEnterPWD" placeholder="" style="" class="text" value=""></div>
    <div class="row"><input type="Button" ID="btnChangePassword" Name="btnChangePassword" STYLE="" Class="btn-submit" VALUE="Change Password" onClick="javascript:ValidateResetPassword();"></div>
</form>

<script>
function ValidateResetPassword() {
    $("#frmChangePassword").validate({
        rules: {
            "txtPWD": { required:true },
            "txtReEnterPWD": { required:true }
        },
        messages: {
            "txtPWD": { required: "Please enter Password" },
            "txtReEnterPWD": {required: "Please re-enter password" }
        }
    });

    if ($("#frmChangePassword").valid()) {
        hashPassword();
    }
}
</script>
0
user1760153 18 Янв 2013 в 23:39
1
Вы можете отредактировать исходный вопрос, чтобы добавить эту информацию. И вы также можете легко отформатировать свой код с помощью кнопки в редакторе. А что такое метод validate?
 – 
Grant Thomas
18 Янв 2013 в 23:40
Не размещайте код в области комментариев. Вы можете отформатировать свой код в своем сообщении и вставить туда коды.
 – 
Jai
18 Янв 2013 в 23:41
stackoverflow.com/editing-help это вам поможет.
 – 
Jai
18 Янв 2013 в 23:43
Validate () - это метод, предоставляемый плагином jQuery Validation. Это очень сложный и обширный метод, который нельзя вставлять в вопрос StackOverflow. ;-) Более важным является ссылка на Validate API для всех, кто должен это понимать.
 – 
Greg Pettit
18 Янв 2013 в 23:48
Спасибо за советы по форматированию кода. Я все еще новичок в stackoverflow. Я запомню это в следующий раз.
 – 
user1760153
19 Янв 2013 в 00:08

1 ответ

Лучший ответ

У вас куча мелких проблем.

1) Вам не нужен встроенный JavaScript на кнопке отправки для вызова подключаемого модуля Validate. Плагин заботится об этом изнутри с помощью функции обратного вызова submitHandler.

2) Кнопка отправки должна быть <input type="submit". Если вам нужно что-то другое, для этого потребуется другой код.

3) Функцию .validate() следует использовать только для «инициализации» формы после готовности DOM. Вы неправильно заключили его в другую функцию, которая вызывается каждый раз при нажатии кнопки.

4) Поскольку условное выражение if valid вызывается только один раз при загрузке страницы, и поскольку форма всегда недействительна при загрузке страницы, функция hashPassword() в настоящее время никогда не вызывается. Если вы хотите, чтобы эта функция выполнялась всякий раз, когда форма действительна, просто поместите ее в функцию обратного вызова submitHandler:.

$(document).ready(function() {

    $("#frmChangePassword").validate({
        rules: {
            "txtPWD": {
                required: true
            },
            "txtReEnterPWD": {
                required: true
            }
        },
        messages: {
            "txtPWD": {
                required: "Please enter Password"
            },
            "txtReEnterPWD": {
                required: "Please re-enter password"
            }
        },
        submitHandler: function (form) { 
            hashPassword();
            form.submit();
            // alert('valid form'); // for demo
            // return false; // for demo
        }
    });

});

Рабочая демонстрация:

http://jsfiddle.net/zgwkR/

Документация по плагину:

http://docs.jquery.com/Plugins/Validation

Официальные образцы форм:

http://jquery.bassistance.de/validate/demo/

3
Sparky 19 Янв 2013 в 20:45
Спасибо, Спарки. Это помогло.
 – 
user1760153
21 Янв 2013 в 05:00