Как добавить несколько правил с различной обработкой на поле с помощью jquery validate - PullRequest
0 голосов
/ 13 июля 2010

как добавить проверку формы с несколькими правилами в одном текстовом поле, и разные действия в зависимости от правила

например, модуль faq, с заранее заданными вопросами, пользователь может сохранять и / или публиковать свои ответы.

У меня есть форма с 1 текстовой областью и 2 кнопками 1 кнопка отправляет форму для сохранения введенного значения в базе данных как черновик Кнопка 1 отправляет форму для сохранения и публикации введенного значения.

<form>
    <input type="hidden" class="answerdraft"/>
    <label class="answerlabel" for="answer">Answer:</label>
    <textarea name="answer" class="answer" rows="8" cols="40"></textarea>
    <input class="submitAnswer" type="submit" value="Save"/>
    <input type="button" class="publishAnswer" value="Save & Publish"/>
</form>

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

Я уже некоторое время использую jquery validate, но в основном с базовой проверкой обязательных полей и тестированием регулярного выражения для электронной почты и тому подобного, но мне неясно, как я могу справиться с вышесказанным, чтобы правильно проверить

Я попробовал (код ниже) текущий код: для удобства чтения: объект вопроса - это контейнер div, в котором находится форма.

$("textarea.answer", question).validate({
    valid: function(val){
        var answerdraft = $('input.answerdraft', question).val();
        enable_button($('.submitAnswer', question));
        enable_button($('.publishAnswer', question));
        return val != "" && !val.match(/^\s+$/) && (val != answerdraft);
    },
    errorMessage: function(val){
        var answerdraft = $('input.answerdraft', question).val();
        if(val == answerdraft)
        {
            disable_button($('.submitAnswer', question));
            enable_button($('.publishAnswer', question));
        }
        else
        {
            disable_button($('.submitAnswer', question));
            disable_button($('.publishAnswer', question));
        }
        return _t.validationanswerrequired;
    },
    appendCompletionIcon: true
});

Это не совсем то, что я хочу, оно использует только 1 правило, а затем в методе ошибок я проверяю, чтобы установить правильные включенные кнопки, но это означает, что кнопки включаются правильно, но текстовое поле иногда получает состояние ошибки, когда оно не нужно показывать ошибку, скорее нейтральное состояние.

я считаю, что мне нужно будет переделать мою логику, не делая это внутри 1 valid: или error: function, но используя опцию rules, но неясно, как я могу связать функцию включения / выключения с кнопками с объектом rules ,

Любой, кто укажет мне правильное направление, очень приветствуется.

1 Ответ

0 голосов
/ 14 июля 2010

Я думаю, я думал, что сложно, Я выяснил, что все включение / отключение кнопок не должно быть напрямую связано с правилом проверки, потому что даже в случае сбоя правила данные в поле технически не являются «недействительными»

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

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

я знаю, что на самом деле это не техническая проблема, на которую дан ответ, скорее это обходной путь, но теперь он решается лучше, чем когда я сделал бы это с помощью validate.

...