对“标签输入”插件进行Jquery验证

时间:2012-06-29 19:22:51

标签: jquery jquery-validate

我正在利用广受欢迎的Bassistance jquery validate plugin来验证我的表单。在同一表格中,我正在使用xoxco's jQuery Tags Input Plugin

我可以验证表单上的所有表单字段,但“标签输入”插件使用的字段除外。

原因是,原始输入被隐藏,插件绘制了新的输入。

  

jsFiddle Example

任何有关将我的验证样式应用于标签输入的帮助都将受到赞赏,Thanx

4 个答案:

答案 0 :(得分:8)

两个问题:

  1. 您的所有字段都必须为name。如果属性不存在,验证将无法正常运行。
  2. 您必须验证案例中的隐藏字段。您要做的是使用ignore: []包含隐藏字段的验证。
  3. 总而言之,您的代码应如下所示:

    <强> HTML:

    <form id="someForm" name="someForm" method="post">
        <input type="text" name="required-field" class="required"/>
        <input id="tagsx" type="text" name="tags" class="required" />
        <input type="submit" value="submit"/>
    </form>
    

    <强> JavaScript的:

    $(document).ready(function () {
        $("#someForm").validate({
            ignore: []
        });
        $('#tagsx').tagsInput({
            width: 'auto',
            autocomplete_url: 'http://xoxco.com/projects/code/tagsinput/test/fake_json_endpoint.html'
        });
    });
    

    示例: http://jsfiddle.net/5eC5B/

    请注意,您必须使用errorPlacement或类似内容才能正确显示错误消息。

答案 1 :(得分:7)

您可以通过使用自定义方法验证虚拟文本字段来验证标记字段。

HTML:

<form id="someForm" name="someForm" method="post">
    <input type="text" id="txt1" name="txt1"/>
    <input id="tagsx" name="tagsx" type="text" />
    <input id="dummy" name="dummy" type="text" /><!-- dummy text field -->
    <input type="submit" value="submit"/>
</form>

CSS:

/*To hide dummy text field*/
#dummy{
    visibility: hidden!Important;
    height:1px;
    width:1px;
}

的JavaScript:

$(document).ready(function () {

    $.validator.addMethod("checkTags", function(value) { //add custom method
        //Tags input plugin converts input into div having id #YOURINPUTID_tagsinput
        //now you can count no of tags
        return ($("#tagsx_tagsinput").find(".tag").length > 0);
    });

    $("#someForm").validate( {
        rules: {
            txt1:"required",
            dummy:"checkTags"
        },
        messages: {
            txt1: "Required",
            dummy: "Required"
        }
    });

    $('#tagsx').tagsInput({
        width: 'auto',
        autocomplete_url: 'http://xoxco.com/projects/code/tagsinput/test/fake_json_endpoint.html' 
    });
});

答案 2 :(得分:4)

validate-Plugin的默认设置是ignore: ":hidden",它使用jQuery.not()从ignore-option中排除所有内容。

如果要包含隐藏字段,可以使用:

$("#myform").validate({
   ignore: ""
});

在您的情况下使用此Javascript代码:

$(document).ready(function () {
    $("#someForm").validate({
       ignore: ""
    });
    $('#tagsx').tagsInput({
        width: 'auto',
        autocomplete_url: 'http://xoxco.com/projects/code/tagsinput/test/fake_json_endpoint.html'
    });
});

更新正如我在验证码中看到的那样,强烈要求name - 属性,因为插件会存储name的所有内容。即使您只在代码中添加ignore: "",也会产生一次验证错误,因为它存储的内容与name相同,且名称为null

这是一个有效的JSFiddle:

  

JSFiddle

答案 3 :(得分:1)

jQuery validate默认忽略不可见的字段。要覆盖此行为,请使用$("#someForm").validate({ignore:""});