即时删除jQuery验证

时间:2009-10-22 17:59:39

标签: jquery validation

我正在尝试阻止jQuery Validation插件验证是否使用$(“#form_id”)选择了某个表单选项(仅限电话)。规则(“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 个答案:

答案 0 :(得分:4)

我完成此任务的方法是使用与验证规则集不同的CSS类。因此,对于通常“需要”的字段,我使用'requirement'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()。显然,考虑到后端的不同验证选项。