48

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

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>

我希望能够提交更改<select>.

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

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

4

8 回答 8

114

我认为您正在寻找的是这样的:

$(field).closest("form").submit();

例如,要处理 onchange 事件,您需要:

$(select your fields here).change(function() {
    $(this).closest("form").submit();
});

如果由于某种原因您没有使用 jQuery 1.3 或更高版本,您可以调用parents而不是closest.

于 2009-01-07T03:38:35.723 回答
25
this.form.submit();

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

于 2009-01-06T21:12:33.927 回答
5

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

$(this.form).submit()

使用此语句 jquery 插件(例如jquery form plugin)可以正常工作,并且 jquery DOM 遍历开销最小化。

于 2014-02-12T19:05:29.273 回答
4

Matthew 的回答类似,我刚刚发现您可以执行以下操作:

$(this).closest('form').submit();

错误:使用父功能的问题是该字段需要立即在表单内才能工作(而不是在 tds、标签等内)。

我的立场是正确的: parent s(带 s)也有效。感谢 Paolo 指出这一点。

于 2009-04-04T06:33:32.523 回答
3

您总是可以JQuery 化您的 form.submit,但它可能只是调用相同的东西:

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

// or you can address it by ID
$("#yourFormId").submit();

您还可以函数附加到提交事件,但这是一个不同的概念。

于 2009-01-06T20:55:08.270 回答
1

您的问题有些令人困惑,因为您没有解释“当前元素”的含义。

如果您在页面上有多个表单,其中包含各种输入元素和“提交”类型的按钮,那么在填写任何字段时点击“输入”将触发该表单的提交。你在那里不需要任何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”的值并决定要做什么。

于 2009-01-06T21:15:29.883 回答
0

在 JQuery 中,您可以调用

$("form:first").trigger("submit")

不知道这样会不会好很多。我认为 form.submit(); 是相当普遍的。

于 2009-01-06T20:52:51.893 回答
0
<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'];

-->
于 2009-06-17T10:50:35.580 回答