Как я могу добавить, удалить или подкачать правила проверки jQuery от страницы?

Как насчет следующего? Это могло бы рассматриваться более атомарно, чем другие примеры, но если все еще быть протестированными для проверки мои предположения не являются неправильными.

UPDATE users SET flags = 1 WHERE id = ( SELECT id FROM users WHERE flags = 0 ORDER BY id DESC LIMIT 1 ) RETURNING ...;

Вы, вероятно, все еще застрянете с любым использованием пост-ГРЭС схемы блокировки внутренне для предоставления последовательных ИЗБРАННЫХ результатов перед лицом одновременные ОБНОВЛЕНИЯ.

41
задан Dan Herbert 17 November 2014 в 20:27
поделиться

3 ответа

Устаревшее примечание:
Этот ответ относится к очень старой версии плагина jQuery.validate () (версия 1.5) и теперь является устаревшим, поскольку плагин предоставляет официальный API для решения этой проблемы. См. Документацию .rules () , чтобы узнать о текущем подходе к решению этой проблемы. Я оставляю этот ответ как есть, чтобы помочь любому, кто должен поддерживать устаревший сайт, который не может обновиться до последних версий jQuery и jQuery.validate ().


Здесь используется некорректная функция валидатора задокументировано в API (и под этим я имею в виду, что это вообще не задокументировано), однако, поскольку это фундаментальная часть работы валидатора, его вряд ли удалят, даже если он недокументирован.

Как только вы инициализировали валидатор jQuery, вы можете снова получить доступ к объекту валидатора, вызвав метод validate () для объекта формы, к которому вы применили валидатор. Этот объект валидатора имеет свойство settings , в котором хранятся настройки по умолчанию в сочетании с настройками, которые вы применили к нему при инициализации.

Предполагая, что я инициализирую валидатор следующим образом:

$('form').validate({
    rules: {
        leftform_input1: { required: true },
        leftform_input2: { required: true }
    },
    messages: {
        leftform_input1: "Field is required",
        leftform_input2: "Field is required"
    }
});

Затем я могу получить эти точные настройки из валидатора, выполнив следующие действия:

var settings = $('form').validate().settings;

Затем я могу легко работать с этим объектом настроек, чтобы добавить или удалить валидаторы для формы .

Вот как вы удалите правила проверки:

var settings = $('form').validate().settings;
delete settings.rules.rightform_input1;
delete settings.messages.rightform_input1;

И вот как вы добавите правила проверки:

var settings = $('form').validate().settings;
settings.rules.leftform_input1 = {required: true};
settings.messages.leftform_input1 = "Field is required";

Вот рабочее решение для сценария в моем вопросе. Я использую jQuery ' s extend () , чтобы перезаписать свойства rules и messages объекта validate , что позволяет переключаться между двумя панелями. .

$('#toggleSwitch').click(function() {
    var settings = $('form').validate().settings;
    var leftForm = $('#leftform');
    var rightForm = $('#rightform');

    if (leftForm.css("visibility") !== "hidden") {
        leftForm.css("visibility", "hidden");
        rightForm.css("visibility", "visible");
        $.extend(settings, {
            rules: {
                rightform_input1: { required: true },
                rightform_input2: { required: true }
            },
            messages: {
                rightform_input1: "Field is required",
                rightform_input2: "Field is required"
            }
        });
    } else {
        rightForm.css("visibility", "hidden");
        leftForm.css("visibility", "visible");
        $.extend(settings, {
            rules: {
                leftform_input1: { required: true },
                leftform_input2: { required: true }
            },
            messages: {
                leftform_input1: "Field is required",
                leftform_input2: "Field is required"
            }
        });
    }
});
69
ответ дан 27 November 2019 в 00:17
поделиться

Пока есть другие способы сделать это ASP.net позволяет использовать несколько тегов форм, если они не все отрисовываются, поэтому, если вы используете несколько представлений для отображения только соответствующего контента, вы можете использовать несколько форм.

немного очистить валидацию и обработку отправки.


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

Как вычисляется: visible было изменено в jQuery 1.3.2. Элемент считается видимым, если он и его родительские элементы занимают место в документе. Видимость CSS не t учтено. В примечаниях к выпуску описываются изменения более подробно.


Вот лучшее / более простое решение из другого сообщения о переполнении стека-

По-видимому, подключаемый модуль проверки позволяет вам указать: видимый в ваших правилах. Вот пост-

Расширенная проверка JQuery: Избежание проверок при определенных условиях

3
ответ дан 27 November 2019 в 00:17
поделиться

"Обязательные" объявления внутри хэша validate.rules не обязательно статически объявлять как "истинные". Вместо этого вы можете предоставить анонимную функцию, которая может проверять видимость чего-либо и возвращать истину или ложь в зависимости от ответа.

$('form').validate({
rules: {
  rightform_input1: { 
    required: function(){
              return $('#leftform').css("visibility") !== "hidden"
              } },
  rightform_input2: {
    required: function(){
              return $('#leftform').css("visibility") !== "hidden"
              } }
  }
});
13
ответ дан 27 November 2019 в 00:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: