【问题标题】:Parsley Validation & Tabs欧芹验证和标签
【发布时间】:2014-06-26 08:03:38
【问题描述】:

我的页面上有一个使用 Foundation-5 选项卡的选项卡上的表单。

当我加载页面时,我收到以下错误:

You must bind Parsley on an existing element.

我认为这是因为调用 parsley 时表单不在 Dom 中,因为非活动选项卡是 display:none

$('form.parsley').parsley({ })

如何为我的表单启用 Parsley?

Parsley 目前是这样调用的:

(function($) {
    $.entwine('ss.zenvalidator', function($) {   
        $('form.parsley').parsley({
             excluded: 'input[type=button], input[type=submit], input[type=reset], input[type=hidden], :hidden, .ignore-validation'
        });

        $('.field').entwine({

            getFormField: function() {
                var rtn = this.find('[name='+this.getFieldName()+'], [name="'+this.getFieldName()+'[]"]');
            },

            getFieldName: function() {
                return this.attr('id');
            },

            getFieldValue: function() {
                return this.getFormField().val();
            },

            evaluateEqualTo: function(val) {
                return this.getFieldValue() === val;
            },

            evaluateNotEqualTo: function(val) {
                return this.getFieldValue() !== val;
            },

            evaluateLessThan: function(val) {
                num = parseFloat(val);
                return this.getFieldValue() < num;
            },

            evaluateGreaterThan: function(val) {
                num = parseFloat(val);
                return parseFloat(this.getFieldValue()) > num;
            },

            evaluateContains: function(val) {
                return this.getFieldValue().match(val) !== null;
            },

            evaluateEmpty: function() {
                return $.trim(this.getFieldValue()).length === 0;
            },

            evaluateNotEmpty: function() {
                return !this.evaluateEmpty();
            },

            evaluateChecked: function() {
                return this.getFormField().is(":checked");
            }


        });


        $('.field.validation-logic').entwine({
            onmatch: function () {
                masters = this.getMasters();
                for(m in masters) {
                    this.closest('form').find('#'+masters[m]).addClass("validation-logic-master");
                }
            },

            getLogic: function() {
                return $.trim(this.getFormField().data('validation-logic-eval'));
            },

            parseLogic: function() {
                js = this.getLogic();
                result = eval(js);
                return result;
            },

            getMasters: function() {
                return this.getFormField().data('validation-logic-masters').split(",");
            }

        });


        $('.field.optionset').entwine({

            getFormField: function() {
                f = this._super().filter(":checked");
                return f;
            }

        });


        $('.field.optionset.checkboxset').entwine({

            evaluateHasCheckedOption: function(val) {
                this.find(':checkbox').filter(':checked').each(function() {
                    return $(this).val() === val || $(this).getLabel() === val;
                })
            },

            evaluateHasCheckedAtLeast: function(num) {
                return this.find(':checked').length >= num;
            },

            evaluateHasCheckedLessThan: function(num) {
                return this.find(':checked').length <= num;
            }
        });

        $('.field input[type=checkbox]').entwine({
            getLabel: function() {
                return this.closest('form').find('label[for='+this.attr('id')+']');
            }
        });

        $('.field.validation-logic.validation-logic-validate').entwine({
            testLogic: function() {
                this.getFormField().toggleClass('ignore-validation', this.parseLogic());
            }
        });


        $('.field.validation-logic.validation-logic-exclude').entwine({
            testLogic: function() {
                this.getFormField().toggleClass('ignore-validation', !this.parseLogic());
            }
        });

        $('.field.validation-logic-master :text, .field.validation-logic-master select').entwine({
            onmatch: function() {
                this.closest(".field").notify();
            },

            onchange: function() {
                this.closest(".field").notify();
            }
        });

        $('.field.validation-logic-master :checkbox, .field.validation-logic-master :radio').entwine({
            onmatch: function() {
                this.closest(".field").notify();
            },

            onclick: function() {
                this.closest(".field").notify();
            }
        });

        $('.field.validation-logic-master').entwine({
            Listeners: null,

            notify: function() {
                $.each(this.getListeners(), function() {
                    $(this).testLogic();
                });
            },

            getListeners: function() {
                if(l = this._super()) {
                    return l;
                }
                var self = this;
                var listeners = [];
                this.closest("form").find('.validation-logic').each(function() {
                    masters = $(this).getMasters();
                    for(m in masters) {
                        if(masters[m] == self.attr('id')) {
                            listeners.push($(this));
                            break;
                        }
                    }
                });
                this.setListeners(listeners);
                return this.getListeners();
            }
        });
    });

})(jQuery);

【问题讨论】:

    标签: javascript zurb-foundation silverstripe parsley.js


    【解决方案1】:

    我认为以下内容就足够了:(未经测试)

    $('form.parsley').entwine({
        onmatch: function() {
            $(this).parsley({
                excluded: 'input[type=button], input[type=submit], input[type=reset], input[type=hidden], :hidden, .ignore-validation'
            });
        }
    });
    

    【讨论】:

    • 这已经足够了:) - 对于其他任何出现并发现这一点的人来说,还有很多其他的东西打破了我必须首先消除的 - 例如 facebook js,不同版本的 jquery网站的主要 js 文件等。一旦那些被淘汰的,它真的只是打破欧芹的标签,这很好用。谢谢!
    猜你喜欢
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多