是否有更好的jQuery解决方案this.form.submit();?
-
03-07-2019 - |
题
我想触发当前元素所在表单的提交事件。我知道的方法有时会起作用:
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所在的表单?
解决方案
我认为你要找的是这样的:
$(field).closest("form").submit();
例如,要处理onchange事件,您将拥有:
$(select your fields here).change(function() {
$(this).closest("form").submit();
});
如果由于某种原因你没有使用jQuery 1.3或更高版本,你可以调用parents
而不是closest
。
其他提示
this.form.submit();
这可能是你最好的选择。特别是如果您尚未在项目中使用jQuery,则无需为此目的添加它(或任何其他JS库)。
您可以随时 JQuery-ize 您的form.submit,但它可能只是调用同样的事情:
$("form").submit(); // probably able to affect multiple forms (good or bad)
// or you can address it by ID
$("#yourFormId").submit();
您还可以附加功能到提交事件,但这是一个不同的概念。
类似于 Matthew's 回答,我刚发现你可以做到以下几点:
$(this).closest('form').submit();
错误:使用父功能的问题是该字段需要立即在表单内工作(不在tds,标签等内部)。
我有所纠正:父 s (带有s)也有效。 Thxs Paolo指出了这一点。
你的问题有些令人困惑,因为你没有解释你的意思<!>“;当前元素<!>”;
如果页面上有多个表单,其中包含各种输入元素和一个类型为<!>的按钮,则提交<!>“;然后点击<!>”;输入<!>“;填写任何字段后,将触发提交该表格。你不需要任何Javascript。
但如果您有多个<!>提交<!>表单上的按钮,没有其他输入(例如<!>“;编辑行<!>;和/或<!>”;删除表中的行<!>;按钮),然后您发布的行可能是这样做的方式。
另一种方式(不需要Javascript)可以为所有按钮(类型为<!> quot; submit <!> quot;)提供不同的值。像这样:
<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 <!>”的值;并决定该怎么做。
在JQuery中,您可以调用
$("form:first").trigger("submit")
不知道这是否好多了。我认为form.submit();非常普遍。
<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'];
-->