没有“form”标签的jQuery验证

时间:2011-06-08 17:20:21

标签: javascript jquery

根据http://docs.jquery.com/Plugins/Validation,“form”标签是必要的,以便进行验证。就我而言,我没有表格标签。如何在单击“按钮”类型控件

时验证(必填字段)我的文本框

3 个答案:

答案 0 :(得分:2)

为什么不添加表单标签?如果它是输入,那么它通常应该是表单的一部分。

答案 1 :(得分:1)

你总是可以用假表格包装它并验证它。

var $textbox = $("#textbox");
$("<form>").append($textbox).validate();

但请注意,在大多数情况下,这应该意味着我们错误地处理了某些事情,并且我会考虑以任何形式提交的每个元素的表单(无论是通过标准的GET / POST,AJAX等) )。

答案 2 :(得分:1)

我知道,这是一个很老的问题,无论如何,我遇到了几乎相同的问题:我已定义了表格:

<form id="some-form-id"></form>

而且在文档中我有这样的输入:

<input type="text" form="some-form-id" />

jQuery验证器无法验证这一点,因为元素不在表单中,所以我进行了小更新: 有方法元素加载要验证的元素,我将其编辑为此文本的版本。我添加了不在表单内的加载项,我加载到变量 outForm 。仅当表单具有属性 id 时才会加载此项目。我测试它,它的工作原理。我希望这会对某人有所帮助。

elements: function () {
                var validator = this,
                    rulesCache = {};

                // select all valid inputs inside the form (no submit or reset buttons)
                var inForm = $(this.currentForm)
                    .find("input, select, textarea")
                    .not(":submit, :reset, :image, [disabled], [readonly]")
                    .not(this.settings.ignore)
                    .filter(function () {
                        if (!this.name && validator.settings.debug && window.console) {
                            console.error("%o has no name assigned", this);
                        }

                        // select only the first element for each name, and only those with rules specified
                        if (this.name in rulesCache || !validator.objectLength($(this).rules())) {
                            return false;
                        }

                        rulesCache[this.name] = true;
                        return true;
                    });

                var formId = $(this.currentForm).attr('id');
                if(typeof formId == 'undefined')
                    return inForm;

                var outForm = $("input[form='"+formId+"'], select[form='"+formId+"'], textarea[form='"+formId+"']")
                    .not(":submit, :reset, :image, [disabled], [readonly]")
                    .not(this.settings.ignore)
                    .filter(function () {
                        if (!this.name && validator.settings.debug && window.console) {
                            console.error("%o has no name assigned", this);
                        }

                        // select only the first element for each name, and only those with rules specified
                        if (this.name in rulesCache || !validator.objectLength($(this).rules())) {
                            return false;
                        }

                        rulesCache[this.name] = true;
                        return true;
                    });

                return $.merge(inForm,outForm);

            },