使用动态生成的表单进行jQuery表单验证

时间:2011-08-09 01:07:07

标签: php jquery forms jquery-validate

我有一个页面,其中包含几种使用PHP动态生成的表单。我正在使用jQuery Validation插件验证它们。表单都是相同的,但与不同的项目相关,所以我给了所有表单相同的类,因此它们可以通过一个函数进行验证(每个表单也有一个唯一的ID)。但我遇到了一些问题:

  1. 我希望错误消息显示在正确的表单项中,但如果我只是使用表单的类,则验证程序将不知道该项目来自哪个表单。
  2. 我有一个提交表单的超链接(以及submit标签中的常规<noscript>按钮),并且通常会使用jQuery提交表单,但同样,jQuery将如何知道哪个提交链接我点击了,提交哪个表单?
  3. 我能想到的最简单的事情就是将表单ID传递给验证方法。这可能吗?

    表格如下:

    <?php while($row= pg_fetch_row($groups)) {  ?>
    <p class="error" id="error-<?php echo $row[0] ?>"></p>
    <form action="../scripts/php/groups-process.php" method="post" id="editgroup-<?php echo $row[0] ?>" class="editgroup">
        <label for ="edit-<?php echo $row[0] ?>" >Edit group name:</label>
        <input type="text" class="text" size="20" maxlength="30" name="edit" id="edit-<?php echo $row[0] ?>" value="<?php echo $row[1] ?>" />
        <noscript><input type="submit" name="editgroup" value="Submit" /></noscript>
        <div id="submitcontainer-<?php echo $row[0] ?>"></div>
    </form>
    <?php } ?>
    

    我通常会像这样验证表格:

    $(document).ready(function(){
        $("#editgroup").validate({
            rules: {edit: {required: true, maxlength: 30}},
            messages: {edit: {required: 'Please enter a group name', maxlength: 'Please enter a shorter group name'},
            errorContainer: "p#error",
        });
        $("#submitcontainer").html('<a class="button" href="javascript:void();" id="submitlink" name="submit">Submit</a>');
        $("#submitlink").click(function() {
            $("#editgroup").submit();
        });
    });
    

2 个答案:

答案 0 :(得分:0)

给所有表格提供相同的课程,而不是尝试这个,

    <form id="1" class="common" method="post" action="page.php">
    <input type="text" class="common_input_class" size="20" maxlength="30" name="edit" id="whatever" value="whatever" />
    <input type="submit" name="submit" class="submit_this_form" value="submit" />
    </form>

    <form id="2" class="common" method="post" action="page.php">
         <input type="text" class="common_input_class" size="20" maxlength="30" name="edit" id="whatever" value="another value" />
          <input type="submit" name="submit" class="submit_this_form" value="submit" />
    </form>

    <script type="text/javascript">
         $(".common").submit(function(){
       var form_id = $(this).attr('id');
       var input_val = $(this).children('.common_input_class').val();
       if (input_val == '')
       {
        alert("input field is required");
        return false;
       }
});
   </script>

答案 1 :(得分:0)

我最终迭代了我的结果两次,所以我动态地为每个表单创建一个表单验证器,然后动态创建表单。这是我想到的最好的方式来给我控制我想要的控制,虽然显然速度较慢并产生更多代码 - 不是理想的解决方案,但它会适用于这种情况。