0

我有一个表单,其中包含没有 ID 的元素,因为使用 while 循环多次创建了相同的表单。我正在尝试验证它,但如果没有 ID 可以从中获取元素值,我想不出如何获取它们。我已经在互联网上搜索了元素的名称,但因为每次创建表单时名称也会重复,这也不起作用。

有没有一种简单的方法来验证这种类型的表格?

4

5 回答 5

0

在循环中创建控件时,您可以为控件创建唯一值nameID值。

txt1
txt2
txt3
txt4
txt5

所以,如果是 PHP,你可以做"txt<?php echo count; ?>"或类似的事情。

于 2013-08-27T12:16:55.420 回答
0

表单字段不应该真正通过标识验证(即唯一),它们应该通过类型验证(通过类或名称属性实现)。

例如,电子邮件字段可能具有类.validate-email。在 jQuery 中,您使用以下命令遍历所有电子邮件字段.each()

$('.validate-email').each(function() {
    $field = $(this);
    // do your validation here...
});

或者您可以使用操作函数,例如.keyup()

$('.validate-email').keyup(function() {
    $field = $(this);
    // do your validation here...
});

编辑以解决评论:

假设你有:

<form id="student_form">
  <!-- some fields... -->
  <div>
    <select class="grade"><!-- markup... --></select>
    <select class="reason_select"><!-- markup... --></select>
    <!-- as many as you want -->
    <select class="reason_select"><!-- markup... --></select>
  </div>
  <-- more fields... -->
</form>

在提交表单时,也许您可​​以尝试:

$("form#student_form").submit(function(form_event) {
    var $grade = $(this).find(".grade");     
    var valid = true;
    if ($grade.val() != "1") {
       $grade.siblings(".reason_select").each(function() {
           if ($(this).val() == "") // or whatever is appropriate
               valid = false;
       })
    }
    valid || form_event.preventDefault();
});
于 2013-08-27T12:24:00.083 回答
0

我同意上面的答案。您无法验证此表单的原因是您的表单具有相同/或相似的选择器。

为表单提供相同的 ID(可以是类似的<form id="form1">或有点类似的。在您的表单与其他表单不匹配后,您应该对内部的输入字段执行相同操作。但是,在这里您可以使用类代替,因为您可以使用表单 ID 选择带有 jQ​​uery 验证的输入字段(例如:)$('#form1 .txtUserName').validate(/* Your functions and other specifications goes here */);

希望这可以帮助。:)

/J。

于 2013-08-27T12:28:14.080 回答
0

如果您需要处理类似元素的数组,您可以使用一种ul > li方法(ul当然需要一个 ID)。

<ul id="elementList">
    <li><!-- element1 --></li>
    <li><!-- element2 --></li>
    <li><!-- element3 --></li>
</ul>

然后,使用 jQuery,您可以通过以下方式访问它:

$('#elementList').each(function(index){
    validateElement(index);
});

希望这可以帮助 :)

于 2013-08-27T12:29:45.483 回答
0

“我有一个名为 Grade 的选择,还有 4 个进一步选择一个名为 的类reason_select。如果 Grade 不是 1,那么至少其中一个reason_selects应该有值。”

假设您的所有表单都有这五个选择元素,并且您只想验证提交的单个表单的那些元素,您可以执行以下操作:

$("form").submit(function(e) {
    var $form = $(this),
        reasonHasVal = false;
    if ($form.find('select[name="grade"]').val() != "1") {
       $form.find("select.reason_select").each(function() {
           if ($(this).val() != "") {
               reasonHasVal = true;
               return false;
           }
       });
       if (!reasonHasVal) {
           e.preventDefault();
           alert("Please select a reason.");
       }
    }
});

关键是使用该.find()方法仅处理相关表单中的元素。

于 2013-08-27T12:49:28.067 回答