Jquery表单验证 - 动态表单名称

时间:2009-08-12 14:51:37

标签: php jquery validation

我需要一个litle帮助来验证我的表单:

现在,我使用此代码验证我的表单:

 $(document).ready(function() {

      $("#set_search").validate({
            rules: {
                q: {
                    required: true,
                    minlength: 2
                },
                q2: {

                    number: true
                },

            },
            messages: {
                q: "Please enter your name",
                q2: "Only numbers allowed",

            }
        });
});

我有这个搜索表单,在for循环中:

for ($i=0;$i<5;$i++) {

       echo "<div class='showhide$i'><form name='set_search' id='set_search' action='settings.php' method='get'><p><label for='q1'>name</label><input type='text' id='q' name='q'/></p><p><label for='q2'>number</label><input type='text' id='q2' name='q2' /></p><p><input type='submit' value='Search'/></p></form></div></p>";

}

不幸的是,只有第一个搜索表单正在运行和验证,而下一个表单没有。所以我想:

  • 我必须将from name和id修改为:

    &lt; form name='set_search$i' id='set_search$i'

  • 我必须将验证修改为:

    var sr = $(this).attr('id');    $(“#set_search”+ sr).validate({

但这不行。你能帮助别人吗? THX。

4 个答案:

答案 0 :(得分:1)

只需将类名附加到必须验证的表单。

答案 1 :(得分:1)

虽然Kieran Hayes的回应。

<form class="myxform"... , $(".myxform").validate({...

但是,生成的html(DOM)会出错。应该改变:

for ($i=0;$i<5;$i++) {

       echo "<div class='showhide$i'><form name='set_search_".$i."' id='set_search_".$i."' action='settings.php' method='get'><p><label for='q1'>name</label><input type='text' id='q' name='q'/></p><p><label for='q2'>number</label><input type='text' id='q2' name='q2' /></p><p><input type='submit' value='Search'/></p></form></div></p>";

}

在javascript中

 $("input[id^='set_search']").validate({...

 $("input[id^='set_search']").each(function(){
      $(this).validate({...});
 });

--- EDIT

Javascrit:

$(document).ready(function() {
    $("form[id^='set_search']").each(function(){
        alert($(this).attr("id"));
        $(this).validate({
            rules: {
                    q: {required: true, minlength: 2},
                    q2: {number: true}
            },
            messages: {
                    q: "Please enter your name",
                    q2: "Only numbers allowed"
            }
        });
     });
});

HTML:

<div class="showhide_1">
    <form name="set_search_1" id="set_search_1" action="settings.php" method="get">
        <p><label for="q1">name</label><input type="text" id="q" name="q"/></p>
        <p><label for="q2">number</label><input type="text" id="q2" name="q2" /></p>
        <p><input type="submit" value="Search"/></p>
    </form>
</div>
<div class="showhide_2">
    <form name="set_search_2" id="set_search_2" action="settings.php" method="get">
        <p><label for="q1">name</label><input type="text" id="q" name="q"/></p>
        <p><label for="q2">number</label><input type="text" id="q2" name="q2" /></p>
        <p><input type="submit" value="Search"/></p>
    </form>
</div>

答案 2 :(得分:0)

这应该找到所有在其ID中都有'set_search'的表单:

$('form[id*="set_search"]').validate();

这个应该找到所有以set_search'开头的表单作为他们的id:

$('form[id^="set_search"]').validate();

任何一方都应该解决你的问题。

答案 3 :(得分:0)

这应该现在可以使用,但有些不对劲......:

                               

$(document).ready(function() {



  $('form[id*="set_search"]').validate({

            rules: {
                q: {
                    required: true,
                    minlength: 2
                },
                q2: {
                    email: true
                },

            },
            messages: {
                q1: "Please enter your name",
                q2: "Please enter a valid email address",

            }
        });


    });
</script>
<style type="text/css">
.error {
    color: red;
    font: 12pt verdana;
    padding-left: 10px
}
.input {
    margin-top:10px;
    margin-left:20px;
}
</style>

</head>
<?php include("config/kapcsolat.inc");?>
<body>
<?php
     for($i=0;$i<3;$i++) {

         echo "<p><div class='showhide$i'><form name='set_search".$i."' id='set_search".$i." ' action='settings.php' method='get'><p><label for='q1'>name</label><input type='text' id='q' name='q'/></p><p><label for='q2'>uniqid</label>
<input type='text' id='q2' name='q2' /></p><p><input type='hidden' id='q3' name='q3' value='1' /></p><p><input type='submit' value='Search'/></p></form></div></p>";
}


?>
</body>
</html>