【发布时间】:2012-11-05 14:49:41
【问题描述】:
我有一个在 Colorbox 中打开并通过 Ajax/JQuery 提交给自身的表单。但是,似乎传递的数据不包括提交按钮本身的值。无论我使用多个提交还是只提交一个,$_POST['submitButton'] 中都没有数据,并且它不响应 isset() 或 empty()。
不过,表单的其余部分都很好。我可以回显 $_POST['name'] 和 $_POST['email'],但不能回显 $_POST['submitButton']
这是我的表单(精简版):
<form id="sub-process" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input name="name" type="text" value="">
<input name="email" type="text" value="">
<input name="submitButton" type="submit" value="Submit">
</form>
这里是处理要通过 AJAX 提交的表单的 jquery,而不是 HTTP 请求。
jQuery(function(){
jQuery('.cbox-form').colorbox({maxWidth: '75%', onComplete: function(){
cbox_submit();
}});
});
function cbox_submit()
{
jQuery("#sub-process").submit(function(){
jQuery.post(
jQuery(this).attr('action'),
jQuery(this).serialize(),
function(data){
jQuery().colorbox({html: data, onComplete: function(){
cbox_submit();
}});
}
);
return false;
});
}
【问题讨论】:
-
serialize不会包含提交按钮的值,因为表单不是通过提交按钮提交的。只有“成功的控件”被序列化为字符串。 -
这令人沮丧。我正在考虑使用隐藏值来解决它,但是我会使用什么 JS 来更改隐藏按钮的值,具体取决于单击哪个按钮并提交表单?
-
在提交按钮上放置一个点击处理程序,并让它为它提交的对象添加一个适当的属性。
-
看起来我要把我的额外按钮更改为复选框,并让“选中”触发所需的操作,这样我可以维护一个提交,并使用隐藏值来检查 isset($ _POST['提交'])