Плагин jQuery Validate - как создать простое настраиваемое правило?

Как создать простое настраиваемое правило с помощью плагина jQuery Validate (с использованием addMethod), которое не использует регулярное выражение?

Например, какая функция создаст правило, которое проверяет, только если установлен хотя бы один флажок из группы?

95 голосов, я думаю, это означает, что документация bassistance.de/jquery-plugins/jquery-plugin-validation может быть неясной: P

Simon Arnold 07.12.2012 02:03

Не знаю, ищете ли вы все еще (4 года спустя), но это может помочь learn.jquery.com/plugins/…

Ron van der Heijden 19.07.2013 12:11
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
360
2
326 797
8

Ответы 8

Вы можете создать простое правило, сделав что-то вроде этого:

jQuery.validator.addMethod("greaterThanZero", function(value, element) {
    return this.optional(element) || (parseFloat(value) > 0);
}, "* Amount must be greater than zero");

А затем примените это так:

$('validatorElement').validate({
    rules : {
        amount : { greaterThanZero : true }
    }
});

Просто измените содержимое addMethod, чтобы проверить ваши флажки.

Что такое this.optional (element) || что делать в этой функции? Кажется, что это есть в каждом правиле, но я не могу сказать, почему это применимо к любому правилу, кроме «обязательного».

machineghost 25.04.2009 02:15

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

Mark Spangler 27.04.2009 20:34

Я так понимаю, this.optional (element) возвращает true, если element имеет значение null?

tnunamak 02.01.2011 21:40

для его запуска "amount" должно быть идентификатором и именем некоторого элемента на странице?

Hoàng Long 09.02.2011 13:41

Да, сумма относится к атрибуту имени некоторого поля формы ввода.

Mark Spangler 10.02.2011 22:15

Спасибо, сработало!

Вот последний код:

$.validator.addMethod("greaterThanZero", function(value, element) {
    var the_list_array = $("#some_form .super_item:checked");
    return the_list_array.length > 0;
}, "* Please check at least one check box");
$(document).ready(function(){
    var response;
    $.validator.addMethod(
        "uniqueUserName", 
        function(value, element) {
            $.ajax({
                type: "POST",
                url: "http://"+location.host+"/checkUser.php",
                data: "checkUsername = "+value,
                dataType:"html",
                success: function(msg)
                {
                    //If username exists, set response to true
                    response = ( msg == 'true' ) ? true : false;
                }
             });
            return response;
        },
        "Username is Already Taken"
    );

    $("#regFormPart1").validate({
        username: {
            required: true,
            minlength: 8,
            uniqueUserName: true
        },
        messages: {
            username: {
                required: "Username is required",
                minlength: "Username must be at least 8 characters",
                uniqueUserName: "This Username is taken already"
            }
        }
    });
});

Я пробовал этот метод, и он работает довольно хорошо, однако мужчины, возвращающие любое другое сообщение, кроме истины, все еще не проверяют «хорошо», он застревает в «Имя пользователя уже занято», что может быть не так? Я также проверил, что он возвращается правильно, повторяя значения вместо того, чтобы возвращать false и true, и это работает. мне кажется, что мой браузер не улавливает return false, return true? это сводит меня с ума ..

Mikelangelo 25.05.2010 19:33

заставил его работать, вставив переменную, которая называется result, перед addmethod, кажется, истинные, ложные значения регистрируются правильно в функции успеха

Mikelangelo 27.05.2010 13:19

@Mikelangelo: Можете ли вы показать нам, что вы имеете в виду под «добавлением переменной перед addMethod»? Я потерялся на этой линии, и у меня те же проблемы, что и у вас. Заранее спасибо!

Loony2nz 28.05.2010 01:38

@Mikelangelo, я встретил ту же проблему, помогите мне, даже если true возвращается jquery.validate shoes из ошибки

Mohan Ram 09.06.2011 09:51

@Matthew: Зачем нужна дополнительная переменная? Что не так с return !(msg == "true"); или каким-то другим эквивалентом логического отрицания в JavaScript?

sarnold 22.01.2012 06:14

Как можно найти здесь: http://stackoverflow.com/questions/2628413/jquery-validator-‌ и-настраиваемое-правило-это при-использует-ajax Улучшение ответа Трейси, переменная isSuccess, возможно, является переменной «результата», о которой говорит Микеланджело.

user1008098 22.10.2011 07:00

Будьте осторожны с этим. Это не полностью функциональный код в том смысле, что "успех" AJAX вернется после 'return response'; запускается, что приводит к неожиданному поведению

Malachi 21.04.2012 15:29

Согласитесь с @Malachi, $ .ajax является асинхронным, поэтому response будет возвращен до того, как вызов AJAX вернется.

robbrit 25.06.2012 22:02

@Malachi прав. Это можно исправить, выполнив вызов синхронизации, но это неприятно. Интересно, есть ли другой способ добиться этого? Существует remote, как предлагали другие, но, насколько я могу судить, он допускает только одну проверку, поэтому он не сработает, если вам нужно выполнить две асинхронные проверки или иметь несколько сообщений об ошибках в зависимости от ответа.

Adam Bergmark 19.03.2013 21:57

есть удаленный метод для проверки jquery: jqueryvalidation.org/remote-method

TecHunter 22.09.2014 12:23
// add a method. calls one built-in method, too.
jQuery.validator.addMethod("optdate", function(value, element) {
        return jQuery.validator.methods['date'].call(
            this,value,element
        )||value==("0000/00/00");
    }, "Please enter a valid date."
);

// connect it to a css class
jQuery.validator.addClassRules({
    optdate : { optdate : true }    
});

addClassRules - хорошее дополнение к ответу.

Four 10.05.2011 22:51

@commonpike Это именно то, что я искал, большое спасибо.

Simba 26.12.2018 13:41

Настраиваемое правило и атрибут данных

Вы можете создать собственное правило и прикрепить его к элементу с помощью атрибута data, используя синтаксис data-rule-rulename = "true";.

Итак, чтобы проверить, отмечен ли хотя бы один из группы флажков:

data-rule-oneormorechecked

<input type = "checkbox" name = "colours[]" value = "red" data-rule-oneormorechecked = "true" />

addMethod

$.validator.addMethod("oneormorechecked", function(value, element) {
   return $('input[name = "' + element.name + '"]:checked').length > 0;
}, "Atleast 1 must be selected");

И вы также можете переопределить сообщение правила (например: необходимо выбрать хотя бы 1), используя синтаксис data-msg-rulename = "my new message".

ПРИМЕЧАНИЕ

Если вы используете метод data-rule-rulename, вам необходимо убедиться, что имя правила написано строчными буквами. Это связано с тем, что функция проверки jQuery dataRules применяет .toLowerCase() для сравнения, а спецификация HTML5 не позволяет использовать верхний регистр.

Рабочий пример

$.validator.addMethod("oneormorechecked", function(value, element) {
  return $('input[name = "' + element.name + '"]:checked').length > 0;
}, "Atleast 1 must be selected");

$('.validate').validate();
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.14.0/jquery.validate.min.js"></script>

<form class = "validate">
    red<input type = "checkbox" name = "colours[]" value = "red" data-rule-oneormorechecked = "true" data-msg-oneormorechecked = "Check one or more!" /><br/>
    blue<input type = "checkbox" name = "colours[]" value = "blue" /><br/>
    green<input type = "checkbox" name = "colours[]" value = "green" /><br/>
    <input type = "submit" value = "submit"/>
</form>

только для jquery.validate ver> = 1.10

Pavel Nazarov 16.11.2017 11:42

Я не мог найти это в официальной документации, я бы хотел, чтобы это было более ясным. Спасибо!

Josh Mc 25.05.2020 03:18

Вы можете добавить собственное правило следующим образом:

$.validator.addMethod(
    'booleanRequired',
    function (value, element, requiredValue) {
        return value === requiredValue;
    },
    'Please check your input.'
);

И добавляйте его как правило так:

PhoneToggle: {
    booleanRequired: 'on'
}        

В этом случае: форма регистрации пользователя, пользователь должен выбрать имя пользователя, которое не используется.

Это означает, что мы должны создать настраиваемое правило проверки, которое будет отправлять асинхронный HTTP-запрос с удаленным сервером.

  1. создайте элемент ввода в вашем html:
<input name = "user_name" type = "text" >
  1. объявите свои правила проверки формы:
  $("form").validate({
    rules: {
      'user_name': {
        //  here jquery validate will start a GET request, to 
        //  /interface/users/is_username_valid?user_name=<input_value>
        //  the response should be "raw text", with content "true" or "false" only
        remote: '/interface/users/is_username_valid'
      },
    },
  1. удаленный код должен быть таким:
class Interface::UsersController < ActionController::Base
  def is_username_valid
    render :text => !User.exists?(:user_name => params[:user_name])
  end
end

Шаг 1 Включил cdn вроде

     <script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

     <script src = "http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>

Код Шаг 2 Нравится

  $(document).ready(function(){
        $("#submit").click(function () {
              $('#myform').validate({ // initialize the plugin
                rules: {
                    id: {
                        required: true,
                        email: true
                    },
                    password: {
                        required: true,
                        minlength: 1
                    }
                },
                messages: {
                    id: {
                        required: "Enter Email Id"

                    },
                    password: {
                        required: "Enter Email Password"

                    }
                },
                submitHandler: function (form) { // for demo
                    alert('valid form submitted'); // for demo
                    return false; // for demo
                }
            });
       }):
  }); 

Другие вопросы по теме