繁体   English   中英

jQuery验证:require_from_group未触发

[英]jQuery Validate: require_from_group Not Firing

在我的表格上,我尝试要求至少一个复选框。 但是,'require_from_group'函数似乎没有被调用。

形式如下:

<form>
    <h2>Request your visitor's guide today.</h2>
    <ol>
        <li class="first-name textbox row1">
            <label for="txtFirstName">First Name</label>
            <input type="text" id="txtFirstName" name="FirstName">
        </li>
        <li class="last-name textbox row1">
            <label for="txtLastName">Last Name</label>
            <input type="text" id="txtLastName" name="LastName">
        </li>
        <li class="email-address textbox row2">
            <label for="txtEmailAddress">Email Address</label>
            <input type="email" id="txtEmailAddress" name="EmailAddress">
        </li>
        <li class="zip-code textbox row2">
            <label for="txtZipCode">ZIP Code</label>
            <input type="text" id="txtZipCode" maxlength="5" name="ZipCode">
        </li>
        <li class="street-address textbox wide row6">
            <label for="txtStreetAddress">Street Address</label>
            <input type="text" id="txtStreetAddress" name="Address1">
        </li>
        <li class="city textbox row7">
            <label for="txtCity">City</label>
            <input type="text" id="txtCity" name="City">
        </li>
        <li class="state dropdown row7">
            <label for="ddlState">State</label>
            <span></span>
            <select id="ddlState" name="State">
                <option></option>
            </select>
        </li>
        <li class="view-online checkbox row3">
            <input type="checkbox" id="chkViewOnline" name="ViewGuideOnline" class="checkbox-required" value="Yes">
            <label for="chkViewOnline">View guide online</label>
        </li>
        <li class="mail-guide checkbox row3">
            <input type="checkbox" id="chkMailGuide" name="MailGuide" class="checkbox-required" value="Yes">
            <label for="chkMailGuide">Mail me a printed guide</label>
        </li>
        <li class="receive-offers checkbox wide row4">
            <input type="checkbox" id="chkReceiveOffers" name="ReceiveOffers">
            <label for="chkReceiveOffers">Receive future emails and information</label>
        </li>
    </ol>
    <p class="commands row5"><button type="submit" id="btnSubmit">Submit</button></p>
</form>

这是我的jQuery:

form.validate({
    debug: true,
    onfocusout: false,
    rules: {
        'FirstName': 'required',
        'LastName': 'required',
        'EmailAddress': {
            required: true,
            email: true
        },
        'ZipCode': {
            required: true,
            digits: true
        },
        'Address1': {
            addressRequired: true
        },
        'City': {
            addressRequired: true
        },
        'State': {
            addressRequired: true
        },
        'ViewGuideOnline': {
            require_from_group: [1, '.checkbox-required']
        },
        'MailGuide': {
            require_from_group: [1, '.checkbox-required']
        }
    },

    groups : {
        guides: 'ViewGuideOnline MailGuide'
    },

    errorPlacement: function (error, e) {
        if (e.attr('name') == 'ViewGuideOnline' || e.attr('name') == 'MailGuide') {
            error.insertAfter(mailGuide);
        } else {
            error.insertAfter(e);
        }
    },

    highlight: function (e, errorClass, validClass) {
        $(e).parent('li').addClass(errorClass).removeClass(validClass);
    },

    unhighlight: function (e, errorClass, validClass) {
        $(e).parent('li').removeClass(errorClass).addClass(validClass);
    },

    submitHandler: function (form) {
        form.submit();
    }
});

jQuery.validator.addMethod('addressRequired', function (value, e) {
    if (mailGuide.is(':checked')) {
        if (value === '') {
            return false;
        } else {
            return true;
        }
    } else {
        return true;
    }
}, 'Required');

jQuery.validator.addMethod('require_from_group', function (value, e, options) {
    var validator = this;
    var selector = options[1];
    var validOrNot = $(selector, e.form).filter(function() {
        return validator.elementValue(this);
    }).length >= options[0];

    if(!$(e).data('being_validated')) {
        var fields = $(selector, e.form);
        fields.data('being_validated', true);
        fields.valid();
        fields.data('being_validated', false);
    }
    return validOrNot;
}, 'Please select an option.');

jQuery.extend(jQuery.validator.messages, {
    required: 'Required',
    email: 'Invalid',
    digits: 'Invalid',
    require_from_group: 'Required'
});

任何帮助是极大的赞赏。

所以,我明白了。 我正在使用同级选择器和伪元素来设置复选框的样式。 在我的CSS中,将输入设置为display: none ,并且jQuery Validate不会在隐藏的元素上触发。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM