javascript – Jquery验证多个选项卡,一次验证一个?

前端之家收集整理的这篇文章主要介绍了javascript – Jquery验证多个选项卡,一次验证一个?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是jQuery的新手,我试图使用它和验证插件(http://docs. jquery.com/Plugins/Validation)创建一个多部分表单,其中包含多个不同部分的选项卡.现在我拥有多个选项卡,“下一步”按钮切换到下一个选项卡.

我遇到的问题是当我终于在最后一页提交时,该表单正确地验证,但是如果另一个页面上有错误,则用户不被通知,并且验证只有在点击“提交”后才会发生.

当我单击“下一步”时,如何单独验证?我真的不想创建多个表单或跟踪隐藏的字段:S任何建议?

谢谢!

<script type="text/javascript">
$(document).ready(function() {
    //....stuff
    //tabs
    var tabs = $("#tabs").tabs();
    $(".nexttab").click(function() {
        //var selected = $("#tabs").tabs("option","selected");
        //$("#tabs").tabs("option","selected",selected + 1);
        $("#tabs").tabs("select",this.hash);
    });

    //use link to submit form instead of button
    $("a[id=submit]").click( function(){
        $(this).parents("form").submit();
    });

    //form validation
    var validator = $("#myForm").validate();    
});
</script>

<form class="cmxform" id="myForm" method="post" action="">
    <div id="tabs">
        <ul>
            <li><a href="#general">General</a></li>
            <li><a href="#tab2"></a></li>
        </ul>

        <div id="general">
             ....stuff...
            <p>
                <a class="nexttab navbutton" href="#tab2"><span>Next</span></a>  
            </p>
        </div>
        <div id="tab2">
            <h2>Tab2</h2>
            <p>
                <a class="nexttab navbutton" href="#general"><span>Prev</span></a>
                <a class="submit navbutton" id="submit" href="#"><span>Submit</span></a>
            </p>
        </div>
    </div>
</form>

编辑:

@安德鲁:

我做了你的第二个例子和禁用选项卡的组合.似乎工作,除了页面刷新重新禁用选项卡.

var tabs = $("#tabs").tabs({

    disabled: [1,2,3,4,5],select: function(event,ui) {
        var valid = true;
        var current = $(this).tabs("option","selected");
        var panelId = $("#tabs ul a").eq(current).attr("href");

        if(ui.index > current)
        {
            $(panelId).find("input").each(function() {
                //console.log(valid);

                if (!validator.element(this) && valid) {
                    valid = false;
                }
            });

        }

        return valid;
    }   

});

结合:

$(".nexttab").click(function() {
    var selected = $("#tabs").tabs("option","selected");
    $("#tabs").tabs("enable",selected+1);
    $("#tabs").tabs("option",selected + 1);
});

解决方法

这可以使用验证器的 .element(selector)功能.你要做的是迭代活动选项卡上的每个元素,并在输入上调用函数.这将依次触发每个元素的验证,显示验证消息.
$(".nexttab").click(function() {
    var valid = true;
    var i = 0;
    var $inputs = $(this).closest("div").find("input");

    $inputs.each(function() {
        if (!validator.element(this) && valid) {
            valid = false;
        }
    });

    if (valid) {
        $("#tabs").tabs("select",this.hash);
    }
});

另外,当用户单击一个选项卡以转到一组新的输入,而不是单击“下一步”时,您可能希望运行类似的代码.

这是一个例子:http://jsfiddle.net/c2y6r/

更新:这是另一种可以做到的方式,取消无效表单元素上的select事件:

var validator = $("#myForm").validate();
var tabs = $("#tabs").tabs({
    select: function(event,"selected");
        var panelId = $("#tabs ul a").eq(current).attr("href");

        $(panelId).find("input").each(function() {
            console.log(valid);
            if (!validator.element(this) && valid) {
                valid = false;
            }
        });

        return valid;
    }
});

但是,现在您必须考虑允许用户当前页面中输入无效数据后返回.另一方面,您可以获得将所有验证码保存在一个功能中的优点,如果用户点击选项卡或下一个链接,则会被触发.

示例:http://jsfiddle.net/c2y6r/1/

更新2,如果您想允许人们通过标签界面向后浏览:

var tabs = $("#tabs").tabs({
    select: function(event,"selected");
        var panelId = $("#tabs ul a").eq(current).attr("href");

        if (ui.index > current) {

            $(panelId).find("input").each(function() {
                console.log(valid);
                if (!validator.element(this) && valid) {
                    valid = false;
                }
            });
        }

        return valid;
    }
});

猜你在找的jQuery相关文章