jquery / js – 如何根据点击提交button来select父窗体?

我有一个网页上有3个表格。 不是嵌套的,只是一个接一个(它们几乎是相同的,只是一个隐藏的variables是不同的)。 一个用户只填写一个表格,我想用一个JS脚本来validation/ etc所有的表单。

那么当用户点击表单#1的提交button时,如何让我的js脚本只处理form1中的字段呢? 我收集它与$(this).parents有关,但我不知道如何处理它。

我的validation脚本(我用在其他地方,只有一个表单)看起来像这样:

$(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()replace$(this).parents('form')。name.val()? 还是有更好的方法去做这件事?

谢谢!

你可以select这样的forms:

 $("#submit").click(function(){ var form = $(this).parents('form:first'); ... }); 

但是,将事件附加到表单本身的提交事件通常会更好,因为即使通过按下某个字段中的回车键进行提交,它也会触发:

 $('form#myform1').submit(function(e){ e.preventDefault(); //Prevent the normal submission action var form = this; // ... Handle form submission }); 

要select表单中的字段,请使用表单上下文。 例如:

 $("input[name='somename']",form).val(); 

在search如何findinput元素的表单时,我find了这个答案。 我想添加一个便条,因为现在有比使用更好的方法:

 var form = $(this).parents('form:first'); 

我不确定什么时候将它添加到jQuery中,但最接近()的方法确实比使用父类()更清晰。 最接近的代码可以更改为:

 var form = $(this).closest('form'); 

它遍历并find第一个匹配你所寻找的元素并停在那里,所以没有必要指定:第一个。

为了得到提交的内容,为什么不是

 this.form 

最简单和最快的结果。

我用下面的方法,它对我工作得很好

 $('#mybutton').click(function(){ clearForm($('#mybutton').closest("form")); }); 

$('#mybutton').closest("form")为我做了诡计。

Eileen:不,它不是“var nameVal = form.inputname.val();” 它应该是…

在jquery中:

//你可以使用ids(更容易)

 var nameVal = $(form).find('#id').val(); 

//或者使用[name = Fieldname]来search字段

 var nameVal = $(form).find('[name=Fieldname]').val(); 

或者在Javascript中:

 var nameVal = this.form.FieldName.value; 

或者是一个组合:var nameVal = $(this.form.FieldName).val();

使用Jquery,你甚至可以遍历表单中的所有input:

 $(form).find('input, select, textarea').each(function(){ var name = this.name; // OR var name = $(this).attr('name'); var value = this.value; // OR var value = $(this).val(); .... });