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(); .... });