我有一个网页,上面有3个表格.没有嵌套,只是一个接一个(它们几乎完全相同,只有一个不同的隐藏变量).用户只填写一个表单,我想用只有一个JS脚本验证/ etc所有表单.
那么,当用户点击表单#1的提交按钮时,如何让我的js脚本只处理form1中的字段?我认为它与$(this).parents有关,但我不知道该如何处理它.
我的验证脚本(我在别处使用过,只有一个表单)看起来像这样:
$(document).ready(function(){
$("#submit").click(function(){
$(".error").hide();
var hasError = false;
var nameVal = $("#name").val();
if(nameVal == '') {
$("#name").after('Please enter your name.');
hasError = true;
}
if(hasError == false) {blah blah do all the processing stuff}
所以我需要用$("#name").val()替换$(this).parents('form').name.val()?或者有更好的方法来解决这个问题吗?
谢谢!
您可以选择以下形式:
$("#submit").click(function(){ var form = $(this).parents('form:first'); ... });
但是,通常最好将事件附加到表单本身的submit事件,因为即使通过从其中一个字段按Enter键提交,它也会触发:
$('form#myform1').submit(function(e){ e.preventDefault(); //Prevent the normal submission action var form = this; // ... Handle form submission });
要选择表单内的字段,请使用表单上下文.例如:
$("input[name='somename']",form).val();
在搜索如何查找输入元素的形式时,我找到了这个答案.我想添加一个注释,因为现在有一个比使用更好的方法:
var form = $(this).parents('form:first');
我不确定它什么时候被添加到jQuery中,但是nearest()方法确实比使用parents()更干净地完成了所需要的操作.最近的代码可以更改为:
var form = $(this).closest('form');
它遍历并找到与您要查找的匹配的第一个元素并停在那里,因此无需指定:首先.
要获得提交内容的形式,为什么不呢
this.form
最简单,最快捷的结果路径.