我有一个表单,其中包含没有 ID 的元素,因为使用 while 循环多次创建了相同的表单。我正在尝试验证它,但如果没有 ID 可以从中获取元素值,我想不出如何获取它们。我已经在互联网上搜索了元素的名称,但因为每次创建表单时名称也会重复,这也不起作用。
有没有一种简单的方法来验证这种类型的表格?
我有一个表单,其中包含没有 ID 的元素,因为使用 while 循环多次创建了相同的表单。我正在尝试验证它,但如果没有 ID 可以从中获取元素值,我想不出如何获取它们。我已经在互联网上搜索了元素的名称,但因为每次创建表单时名称也会重复,这也不起作用。
有没有一种简单的方法来验证这种类型的表格?
在循环中创建控件时,您可以为控件创建唯一值name
或ID
值。
txt1
txt2
txt3
txt4
txt5
所以,如果是 PHP,你可以做"txt<?php echo count; ?>"
或类似的事情。
表单字段不应该真正通过标识验证(即唯一),它们应该通过类型验证(通过类或名称属性实现)。
例如,电子邮件字段可能具有类.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();
});
我同意上面的答案。您无法验证此表单的原因是您的表单具有相同/或相似的选择器。
为表单提供相同的 ID(可以是类似的<form id="form1">
或有点类似的。在您的表单与其他表单不匹配后,您应该对内部的输入字段执行相同操作。但是,在这里您可以使用类代替,因为您可以使用表单 ID 选择带有 jQuery 验证的输入字段(例如:)$('#form1 .txtUserName').validate(/* Your functions and other specifications goes here */);
。
希望这可以帮助。:)
/J。
如果您需要处理类似元素的数组,您可以使用一种ul > li
方法(ul
当然需要一个 ID)。
<ul id="elementList">
<li><!-- element1 --></li>
<li><!-- element2 --></li>
<li><!-- element3 --></li>
</ul>
然后,使用 jQuery,您可以通过以下方式访问它:
$('#elementList').each(function(index){
validateElement(index);
});
希望这可以帮助 :)
“我有一个名为 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()
方法仅处理相关表单中的元素。