Javascript 对于这个.form.submit();,有更好的jQuery解决方案吗;?

Javascript 对于这个.form.submit();,有更好的jQuery解决方案吗;?,javascript,jquery,forms,submit,Javascript,Jquery,Forms,Submit,我想触发当前元素所在表单的提交事件。我知道的一种有时有效的方法是: this.form.submit(); 我想知道是否有更好的解决方案,可能是使用jQuery,因为我不是100%确定该方法在每个浏览器中都有效 编辑: 我的情况如下: <form method="get"> <p><label>Field Label <select onchange="this.form.submit();"> &

我想触发当前元素所在表单的提交事件。我知道的一种有时有效的方法是:

this.form.submit();
我想知道是否有更好的解决方案,可能是使用jQuery,因为我不是100%确定该方法在每个浏览器中都有效

编辑:

我的情况如下:

<form method="get">
    <p><label>Field Label
        <select onchange="this.form.submit();">
            <option value="blah">Blah</option>
            ....
        </select></label>
    </p>
</form>

字段标签
废话
....

我希望能够在更改
时提交表格

我要寻找的是一种解决方案,它可以在任何表单中的任何字段上工作,而不知道表单上的id或名称
$('form:first')
$('form')
将不起作用,因为表单可能是页面上的第三个表单。另外,我已经在网站上使用jQuery了,所以使用一点jQuery也没什么大不了的

那么,有没有办法让jQuery检索输入/选择/文本区域所在的表单?

在jQuery中,您可以调用

$("form:first").trigger("submit")
不知道这样是否更好。我认为表单是提交的;非常通用。

您可以随时使用您的form.submit,但它可能会调用相同的东西:

$("form").submit(); // probably able to affect multiple forms (good or bad)

// or you can address it by ID
$("#yourFormId").submit();
您也可以向submit事件调用函数,但这是一个不同的概念

this.form.submit();

这可能是你最好的选择。特别是如果您的项目中还没有使用jQuery,那么就不需要为此目的添加它(或任何其他JS库)。

您的问题有些混乱,因为您没有解释“当前元素”的含义

如果您在一个页面上有多个表单,其中包含各种输入元素和类型为“提交”的按钮,则在填充任何字段时点击“回车”将触发该表单的提交。这里不需要任何Javascript

但是,如果表单上有多个“提交”按钮,并且没有其他输入(例如表中的“编辑行”和/或“删除行”按钮),则可以使用您发布的行来完成此操作

另一种方法(不需要Javascript)是为所有按钮(类型为“提交”)提供不同的值。像这样:

<form action="...">
    <input type="hidden" name="rowId" value="...">
    <button type="submit" name="myaction" value="edit">Edit</button>
    <button type="submit" name="myaction" value="delete">Delete</button>
</form>

编辑
删除
单击按钮时,将仅提交包含该按钮的表单,并且仅发送您点击的按钮的值(以及其他输入值)


然后在服务器上,您只需读取变量“myaction”的值并决定要执行的操作。

我认为您要查找的是如下内容:

$(field).closest("form").submit();
例如,要处理onchange事件,您需要:

$(select your fields here).change(function() {
    $(this).closest("form").submit();
});
如果出于某种原因,您没有使用jQuery 1.3或更高版本,您可以调用
parents
,而不是
closest

,类似于answer,我发现您可以执行以下操作:

$(this).closest('form').submit();
错误:使用父功能的问题是字段需要立即在表单中工作(而不是在tds、标签等中)

我被纠正了:家长s(带s)也有效。谢谢保罗指出这一点。


<form method="get">
   <p><label>Field Label
      <select onchange="this.form.submit();">
         <option value="blah">Blah</option>
            ....
     </select>
     </label>
   </p>
    **<!-- <input name="submit" type="submit" /> // name="submit_new_name" -->**
  </form>

<!-- 

   this.form.submit == this.form.elements['submit'];

-->
字段标签 废话 ....

****
我发现使用jQuery的最佳解决方案是

$(this.form).submit()

使用此语句jquery plugins(例如)可以正确工作,并且jquery DOM遍历开销最小化。

您发布的方法一直对我有效。是的,为什么这个.form.submit()不起作用?对于parent('form'),您所说的可能是正确的,但是对于parentS('form'),即使字段在td内,它也应该起作用,等等。parentS不是这样吗('form')返回作为此元素父元素的所有表单?这可能会提交一个您尚未打算提交的外部表单。刚刚遇到此问题,希望添加您不应该在表单中包含表单。这是无效的,在IE中不起作用。因此使用
父元素(“表单”)
是完全可以接受的,尽管我不知道它与
最近的(“表单”)
相比效率有多高。请使用最近的(“表单”)而不是父(“表单”)。parents()获取元素的所有父元素,而closest()停止使用元素父元素的第一个表单element@TeKapa:谢谢。jQuery 1.3(添加了
最接近的
功能)在我回答问题一周后发布。问题是他不想这么做,现在当然想了。这是在我提交答案后的第二天编辑出来的。