如何从提交按钮获取formmethod和formaction
How to get formmethod and formaction from submit button
我本以为表单对象会用formmethod和formaction填充。
问题:有没有一种方法可以达到形式化?或者找出表单中的哪个按钮被点击,以便从按钮访问它们?
我需要重写我的事件处理程序来捕捉按钮($(document).on('click', '.myformbtn', function(e)
)上的点击并使用var queryString= $(this).parent('form').serialize();
访问表单吗?
<form>
<button type="submit"
formmethod="POST"
formaction="/mysave">Save</button>
<button type="submit"
formmethod="GET"
formaction="/mydata">Get new data</button>
</form>
$(document).ready(function()
{
$(document).on('submit', 'form', function(e) {
e.preventDefault();
var formaction = $(this).getFormAction();
var queryString= $(this).serialize();
$.ajax({
type: formmethod,
url: formaction,
data: queryString
});
});
});
我发现了类似的问题,答案总是$(this).attr('formaction')
,这是不正确的,因为表单没有该属性。我希望提供一个如何使用它的例子能让人们的大脑发挥作用。
考虑到您的代码,我们可以通过以下方式获得导致表单提交的按钮:
var target = e.originalEvent || e.originalTarget;
var clickedElement = $( target.currentTarget.activeElement);
$(document).ready(function()
{
$(document).on('submit', 'form', function(e) {
e.preventDefault();
var target = e.originalEvent || e.originalTarget;
var clickedElement = $( target.currentTarget.activeElement);
var formaction = $(clickedElement).attr("formaction");
var formmethod = $(clickedElement).attr("formmethod");
alert(" formaction "+formaction);
var queryString= $(this).serialize();
$.ajax({
type: formmethod,
url: formaction,
data: queryString
});
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<form>
This is my form with 2 submit buttons<br><br>
<button type="submit"
formmethod="POST"
formaction="/mysave">Save</button>
<button type="submit"
formmethod="GET"
formaction="/mydata">Get new data</button>
</form>
我发现的唯一能跨浏览器工作的解决方案。我仍然会把正确的答案授予@vijayP,因为这个答案让我走上了正确的研究道路。除非有人想出一种方法来访问单击的元素,而不是搜索聚焦的元素。
var clickedElement = $(this).find("input[type=submit]:focus" );
// Added to catch enter press, since there will be no focus.
if(clickedElement.length == 0) {
var clickedElement = $(this).find("input[type=submit]" );
}
var formaction = clickedElement.attr("formaction");
var formmethod = clickedElement.attr("formmethod");
编辑
这个方法有太多错误。就像必须捕获键盘事件一样,其他输入类型或过滤器也会提交。
我又回到了onclick解决方案。以防有人好奇。
<form class="dc-form">
// Will activate ajax code
<input type="submit" class="dc-form-btn" value="" />
// Will output error to console
<input type="submit" class="" value="" />
</form>
$(document).ready(function()
{
$(document).on('submit', 'form.dc-form', function(e) {
e.preventDefault();
console.log('Invalid form button');
});
$(document).on('click', '.dc-form-btn', function(e) {
e.preventDefault();
var form = $(this).closest("form.dc-form");
var formaction = $(this).attr("formaction");
var formmethod = $(this).attr("formmethod");
var formDataType = $(this).attr("formdatatype");
var queryString = form.serialize();
var error=false;
if(typeof formaction === "undefined" || formaction === '')
{
console.log('missing form action');
error=true;
}
if(typeof formmethod === "undefined" || formmethod === '')
{
console.log('missing form method');
error=true;
}
if(typeof formDataType === "undefined" || formDataType === '')
{
console.log('missing form data type');
error=true;
}
if(error)
{
console.log("Error executing form button.");
console.log(WEB_URI + formaction);
console.log(formmethod);
console.log(formDataType);
console.log(queryString);
return;
}
$.ajax({
type: formmethod,
url: WEB_URI + formaction,
data: queryString,
dataType: formDataType,
success: ajax_response_success,
error: function(err) {/*console.log(err.responseText);*/alert('ajax error');}
});
});
});
相关文章:
- Dojo:访问dijit.form.Select中单击的项目
- Javascript form innerHTML
- 无法在有条件呈现的富:面板上提交h:form
- Javascript form.submit()方法是如何工作的
- 通过jQueryAjax一起发布Array和Form数据时出现问题
- This.Form.Submit() on CakePHP
- 带有Request.Form的JScript数组
- jQuery函数无法处理Form Submit
- 使用application/x-www-form-urlencoded使用node.js在post请求中发送数组
- Javascript:获取“;FORM”;它是在.html到外部.js文件中创建的
- 如何停止向上滚动<按钮dojoType=“;dijit.form.Button”;type=“;提交”/>在
- Angular Form Wide验证(不特定于字段)
- 当在coldfusion中通过AJAX传递时,FORM提交在IE浏览器中给出空表单
- Form获胜'没有ID主联系表格无法验证
- 如何使用SpringWebFlow在JavaScript中处理form.submit()
- Form.target=window.opener.name不起作用
- 在Javascript中向Ext.form.Formpanel添加多个按钮
- Javascript innerHTML with form
- this.form.submit()无法正常使用php
- 清空$_GET和$_POST,表单使用form.submit()