是否有更好的jQuery解决方案this.form.submit();?

时间:2009-01-06 20:49:07

标签: javascript jquery forms 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>

我希望能够在更改<select>时提交表单。

我正在寻找的解决方案适用于任何形式的任何字段,而不知道表单上的ID或名称。 $('form:first')$('form')不起作用,因为表单可能是页面上的第三个。此外,我已经在网站上使用jQuery,所以使用一些jQuery并不是什么大问题。

那么,有没有办法让jQuery检索输入/ select / textarea所在的表单?

8 个答案:

答案 0 :(得分:105)

我认为你要找的是这样的:

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

例如,要处理onchange事件,您将拥有:

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

如果由于某种原因您未使用jQuery 1.3或更高版本,则可以拨打parents而不是closest

答案 1 :(得分:24)

this.form.submit();

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

答案 2 :(得分:3)

你总是JQuery-ize你的form.submit,但它可能只是调用相同的东西:

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

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

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

答案 3 :(得分:3)

Matthew's回答相似,我发现您可以执行以下操作:

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

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

我有所纠正:父 s (带有s)也有效。 Thxs Paolo指出了这一点。

答案 4 :(得分:3)

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

$(this.form).submit()

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

答案 5 :(得分: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”的值,然后决定该怎么做。

答案 6 :(得分:0)

在JQuery中,您可以调用

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

不知道这是否好多了。我认为form.submit();非常普遍。

答案 7 :(得分: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'];

-->