jQuery проверка не работает для HTML формы в Laravel - PullRequest
0 голосов
/ 29 января 2020

У меня есть форма, которая позволяет пользователю обновить свой текущий пароль. Данные проходят через плагин Validate в Jquery, то есть с правилами и сообщениями. И я использую AJAX для передачи данных на мой контроллер, включения проверки для них и обновления текущего пароля на новый введенный пароль. Однако плагин проверки jquery не работает для меня.

Пожалуйста, просмотрите код:

template.blade. php:

<form id="update_password_form">
    @csrf
    <div class="single_form_item ">
        <lebel class="default_lebel" for="password">Password</lebel><br>
        <input class="default_input" id="new_password" type="password" value="" placeholder="New password">
        <h6></h6>
        <input class="default_input ml-15-fix" id="old_password" type="password" value="" placeholder="Old password">
        <h6></h6>
    </div>
    <button class="btn_small btn_br_20 float-right" type ='submit'> Save </button>
</form>

myfile. js:

$("#update_password_form").validate({
        errorClass: "invalid form-error",
        errorElement: 'div',
        errorPlacement: function(error, element) { 
            error.appendTo(element.parent().find('h6'));
        },
        rules: {
            new_password:{
                required: true, 
                minlength:5,
            },
            old_password:{
                required: true, 
                minlength:5,
            },
        },
        messages: {
            new_password: {
                required: "Enter password",
                minlength: "Password must be at least 5 characters long"
            },
            old_password: {
                required: "Enter password",
                minlength: "Password must be at least 5 characters long"
            },
        },
        submitHandler: function (form) {
            var data = $("#update_password_form").serialize();
            $.ajax({
                headers: {
                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                },
                type:"POST",
                data:data,
                url: base_url+'/password',
                dataType:"json",
                success:function(data){
                   if(data.success){
                    console.log('SUCCESS');
                    }else{        
                        console.log('ERROR');
                    }
                }
            });
        }
    });

MyController. php:

public function password(Request $request)
    {
        $rules = [
            'new_password'=>'required',
            'old_password' => 'required',
        ];

        $customMessages = [
            'new_password.required' => 'The password field is required.',
            'old_password.required' => 'The old password field is required.',
        ];

        if ($validator->fails()){
            $response['message'] = $validator->errors()->all()[0];
            $response['success'] = false;
            return $response;
        } else { 
            $user_id = Auth::user()->id;
            $new_password = $request->new_password;
            $old_password = $request->old_password;

            $check_pass = User::where('id', $user_id)->first();
            if (Hash::check($old_password, $check_pass->password)) {

                $hashed_pswd = Hash::make($new_password);
                User::where('id', $user_id)
                    ->update(['password' => $hashed_pswd]);
                $response['status'] = true;
                $response['message'] = 'Updated your password!';
                return $response;
            }
            else {
                $response['status'] = false;
                $response['message'] = 'Incorrect password.';
                return $response;
            }
        }
    }

Почему нет мои данные проверяются с помощью плагина Jquery?

1 Ответ

1 голос
/ 29 января 2020

Опция rules плагина jQuery validate использует элемент names , а не ids. Из документов (выделено мной):

rules ...

Тип: Object Пары ключ / значение, определяющие пользовательские правила. Ключ - это имя элемента (или группы флажков / переключателей), значение - это объект, состоящий из пар правил / параметров или простой строки.

Ваш * Входы 1036 * не имеют атрибутов имени, только идентификаторы. Таким образом, проверка не связана с этими входами вообще, и ничто не проверено. Просто добавьте атрибут имени к обоим входам:

<input name="new_password" id="new_password" ...>
<input name="old_password" id="old_password" ...>

Кстати, без имен ваши поля не будут отправлены на ваш бэкэнд, поэтому проверка бэкэнда Laravel также не будет выполнена!

Работа - намного проще - JSFiddle .

Примечание: у вас есть опечатка - <lebel> должно быть <label>.

Еще одно примечание: пожалуйста, попробуйте создать минимальный, полный и проверяемый пример . Большую часть времени, потраченного на этот вопрос, я просто удалял из своего кода: CSS классы, пустые <h6>, все error*, messages ... не только тем, что другим легче читать и понять свою проблему, но, сводя все к минимуму, чтобы воспроизвести проблему, вы гораздо чаще сами найдете ответ, не нуждаясь в помощи!

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