问题描述
|
最近,我遇到了一个问题,即$ .post不发送有关已按下按钮的信息。
即我们有一个带有两个按钮的表格。
<form method=\"post\" action=\"/home/index\">
<input type=\'hidden\' name=\'data1\' value=\'value1\' />
<button name=\"button1\" type=\"submit\">First</button>
<button name=\"button2\" type=\"submit\">Second</button>
</form>
$(document).ready(function() {
$(\'#formId\').submit(function () {
var f = $(this);
var action = f.attr(\"action\");
var serf = f.serialize();
$.post(action,serf,//onreturn
function (data) {
//do something here on success
},\'json\'
);
return false;
});
});
如果用户按下第一个按钮,则不带ajax表单的发布如下:data1 = value1&button1
但是当我使用$ .post发布表单时,它不包含有关按钮的任何信息:data1 = value1
jQuery 1.6.1
行为取决于所按下的按钮。
任何帮助或解决方法都将是适当的!
解决方法
由于您要停止浏览器的默认行为(即提供按钮值的原因),因此您必须捕获按下的按钮,然后将该信息添加到要发布的数据中(“ѭ1”数据)。可能最可靠的方法是钩住按钮上的
click
事件以及表单的submit
事件,并将它们全部路由到一个中心函数,该中心函数使用(或不使用)按钮值(不在表单提交的另一种方式,而不是按这些按钮之一)。
遵循以下原则:
$(document).ready(function() {
function submitTheForm(f,button) {
var action = f.attr(\"action\");
var serf = f.serialize();
if (button && button.name) {
serf += \"&\" + encodeURIComponent(button.name);
if (button.value) {
serf += \"=\" + encodeURIComponent(button.value);
}
}
$.post(action,serf,//onreturn
function (data) {
//do something here on success
},\'json\'
);
}
$(\'#formId\').submit(function () {
submitTheForm($(this));
return false;
});
$(\"#formId :submit\").click(function() {
submitTheForm($(this).closest(\'form\'),this);
return false;
});
});
, 我不认为这正在发生。但是无论如何,您也可以这样。
$(\"#formid\").children(\"input[type=\"submit\"]\").click(function() {
var name = $(this).attr(\"name\");
post(name);
return false;
});
function post(buttnname) {
var action = $(\"#formid\").attr(\"action\");
var serf = $(\"#formid\").serialize()+\"&button=\"+buttname;
$.post(action,//onreturn
function (data) {
//do something here on success
},\'json\'
);
}