2009-10-22 2 views
2

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

Все, что я получаю, является ошибкой 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} 
    } 
}); 

Insights оценили.

ответ

4

то, как я эту задачу, чтобы использовать класс 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(). И, очевидно, учитывайте различные варианты проверки на заднем конце.

+0

Я думаю, что $ (this) .rules ("remove") удалит все правила, а не только нужные? – user1016945

Смежные вопросы