Jquery 如何根据单击的提交按钮选择父窗体?

Jquery 如何根据单击的提交按钮选择父窗体?,jquery,forms,Jquery,Forms,我有一个网页,上面有三张表格。不是嵌套的,只是一个接一个它们几乎相同,只是一个不同的隐藏变量。一个用户只需填写一个表单,我想用一个JS脚本验证/等等所有表单 那么,当用户单击form1的submit按钮时,我如何使我的js脚本只处理form1中的字段呢?我想这和这美元有关。父母,但我不知道该怎么办 我在别处使用的验证脚本,只有一个表单,如下所示: $(document).ready(function(){ $("#submit").click(function(){ $

我有一个网页,上面有三张表格。不是嵌套的,只是一个接一个它们几乎相同,只是一个不同的隐藏变量。一个用户只需填写一个表单,我想用一个JS脚本验证/等等所有表单

那么,当用户单击form1的submit按钮时,我如何使我的js脚本只处理form1中的字段呢?我想这和这美元有关。父母,但我不知道该怎么办

我在别处使用的验证脚本,只有一个表单,如下所示:


$(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}
所以我需要用$this.parents'form.name.val替换$name.val这样的东西吗?还是有更好的办法


谢谢

您可以这样选择表单:

$("#submit").click(function(){
    var form = $(this).parents('form:first');
    ...
});
但是,通常最好将事件附加到表单本身的提交事件,因为即使在其中一个字段中按enter键进行提交时,也会触发事件:

$('form#myform1').submit(function(e){
     e.preventDefault(); //Prevent the normal submission action
     var form = this;
     // ... Handle form submission
});
要选择表单内的字段,请使用表单上下文。例如:

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

要获得提交在其中的表单,为什么不

this.form
最简单和最快捷的结果路径。

艾琳:不,它不是var nameVal=form.inputname.val;。应该是

在jQuery中:

// you can use IDs (easier)

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

// or use the [name=Fieldname] to search for the field

var nameVal =  $(form).find('[name=Fieldname]').val();
或在JavaScript中:

var nameVal = this.form.FieldName.value;
或组合:

var nameVal = $(this.form.FieldName).val();
使用jQuery,您甚至可以循环使用表单中的所有输入:

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

我在搜索如何查找输入元素的形式时找到了这个答案。我想添加一个注释,因为现在有一种比使用更好的方法:

var form = $(this).parents('form:first');
我不确定它是什么时候被添加到jQuery中的,但是最接近的方法确实比使用父方法更干净。使用“最接近”可将代码更改为:

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

它向上遍历,找到与您要查找的内容匹配的第一个元素,并在那里停止,因此无需指定:first。

我使用了以下方法&它对我很有效

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

$'mybutton'.ClosesForm帮了我的忙。

你也可以用它来选择所有的输入子项:$this.children.FilterInput$input,textarea,select,form为什么不能像在普通Javascript中一样使用var form=$this.form:function onClickbutton{var form=button.form;}????为什么需要jquery包装器呢!因为这也是一个jQuery问题。由于接受的答案还返回一个jQuery对象,我认为这会很好。既然可以不用jQuery,为什么还要用jQuery呢。