Удаление проверки jQuery на лету - PullRequest
2 голосов
/ 22 октября 2009

Я пытаюсь предотвратить проверку плагина jQuery Validation, если выбран определенный параметр формы (только для телефона) с использованием $ ("# form_id"). Rules ("remove", "required"); особенность, но она не работает ...

Все, что я получаю, это ошибка javascript, когда я выбираю только телефон: "TypeError: Результат выражения 'F' [undefined] не является объектом, и форма не будет отправлена, поскольку она все еще проверяет обязательные поля.

//field validation
$('#location').change(function(){
    location_val = $('#location').val();

    if (location_val == "select") {
        $('.hide').hide();
    }
    else if (location_val == "my_location") {
        $('.hide').hide();
        $('#f_address, #f_address2, #f_city, #f_state_zip, #f_phone').customFadeIn('fast');
        $("#step2").rules("add", "required");
    }
    else if (location_val == "customers_location") {
        $('.hide').hide();
        $('#f_area, #f_phone, #f_city, #f_state_zip').customFadeIn('fast');
        $("#step2").rules("add", "required");
    }
    else if (location_val == "both") {
        $('.hide').hide();
        $('#f_area, #f_address, #f_address2, #f_city, #f_state_zip, #f_phone').customFadeIn('fast');
        $("#step2").rules("add", "required");
    }
    else if (location_val == "phone") {
        $('.hide').hide();
        $('#f_phone').customFadeIn('fast'); 
        $("#step2").rules("remove", "required");

    }
});

$("#step2").validate({
    rules: {
        city: {required: true},
        state: {required: true},
        zip: {required: true}
    }
});

Понимание ценится.

1 Ответ

4 голосов
/ 22 октября 2009

Способ, которым я выполнил эту задачу, состоит в том, чтобы использовать класс CSS, отличный от набора правил проверки. Поэтому для полей, которые обычно являются «обязательными», я генерирую элементы с помощью CSS-класса «требования». Затем я добавляю это на странице:

function addRequired() {
    $('.requirement').each(function() {
        $(this).rules("add", {required: true});
    });
}

function removeRequired() {
    $('.requirement').valid(); // can't remember why I have this, but it's in source control now for awhile...
    $('.requirement').each(function() {
        $(this).rules("remove");
    });
}

$(document).ready(function() {
    $('form').validate({...});
    addRequired();
});

затем подключите некоторое поведение к вашему элементу формы запуска (который в вашем случае выглядит как радиокнопка), чтобы при его выборе вызвать addRequired() А когда он больше не выбран, звоните removeRequired(). И, очевидно, учитывают различные варианты проверки на серверной части.

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