Проверка пользовательских правил Jquery с зависимостями и свойствами параметров - PullRequest
1 голос
/ 26 марта 2012

Итак, у меня есть раскрывающийся список html с 4 значениями A, B, C и D. И 4 предварительно заполненными текстовыми полями (P1, P2, P3, P4) с некоторыми текстами в них и 4 пустыми текстовыми полями (B1, B2, B3 и B4).

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

, если раскрывающееся значение равно A, я хочу толькоубедитесь, что значение в пустом текстовом поле B1 не равно значению в предварительно заполненном текстовом поле P1 и B1 также нельзя оставлять пустым.

То же самое для значения выпадающего списка с B -> P2.val!= B2.val, и B2 не должен быть пустым.и то же самое относится и к другим.

И я придумал этот метод для одного текстового поля, но он как-то не работает, не уверен, что не так.Был бы признателен за решение моей проблемы.

И предполагаемый результат для приведенного ниже фрагмента кода: если в раскрывающемся списке есть значение A, то только тогда он должен проверить, совпадают ли значения в двух текстовых полях, т. Е. В P1 и B1.!!

HTML

<form>
    <select class="inlineEdit" name="Dropdownbox" id="Dropdownbox">
    <option value="A">
        A
    </option><option value="B">
        B
    </option><option value="C">
        C
    </option><option value="D">
        D
    </option>
</select>
    <br/><br/>
    <input type="text"  name="P1" value="Old Value" />
    <br/><br/>
    <input type="text"  name="B1" />
    <button type="submit">Test</button>
</form>​​​​​​​​​​​

JQuery

jQuery.validator.addMethod("change", function(value, element, param) {
alert(param + " " + value);
    return this.optional(element) || value != param;
}, jQuery.format("You must enter {0}"));


$("form").validate({
    rules: {
        B1: {
            required: function(element) {
                return $("#Dropdownbox").val() == "A";
            },
            change: {
                param: $("#P1").val(),
                depends: function(element) {
                    return $("#Dropdownbox").val() == "A";
                }
            }
        }
    },

    debug: true
});​

........

Можно попытаться запустить приведенный выше код здесь: http://jsfiddle.net/

Проблема в $ ("# P1"). Val отправляет true, а не фактическое значение в paramВот почему это не работает.Если я жестко кодирую значения в param, код работает нормально.какие-либо решения ???

Спасибо,

1 Ответ

0 голосов
/ 27 марта 2012

Несколько мыслей:

Возможно, вы пропустили знак # перед P1.Если вы пытаетесь идентифицировать P1 как имя, для этого требуется $('[name="P1"]').Для ловли подобного рода тегов было бы полезно, если бы вы могли включить реальный код, а не вставлять строки по умолчанию.Точно так же похоже, что вы идентифицируете B1 по имени.Если это вместо идентификатора или класса или что-то, это будет вашей проблемой.По таким причинам, как это, может быть полезно иметь пример кода, содержащий соответствующий HTML.

Кроме того, какие эффекты вы видите ?При ответе на подобные вопросы часто бывает полезно иметь как предполагаемый, так и реальный результат.

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

edit: yep.Как я и думал.Вы используете $("#P1").Это даст вам узел с идентификатором «P1».Чтобы использовать JQuery для получения имени, вам нужно использовать $('[name="P1"]').Кроме того, вы можете установить свой HTML-код таким образом, чтобы соответствующий тег имел идентификатор, соответствующий его имени (как вы сделали с Dropdownbox).

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