在我的WordPress安装中,我使用以下表单作为高级搜索页面的一部分。
<form action="/advanced-search/" method="get">表单工作正常,但生成的URL如下:
/advanced-search/page/3/?act=s&f=cichlidae&g&s&c&r&tmin&tmax&hmin&hmax&pHmin&pHmax&cmin&cmax&sF&sM&aL&aD&aH
有没有办法阻止表单发送那些空的变量?在上面的例子中,只搜索了f (值为cichlidae)。因此,我更希望它生成如下的URL:
/advanced-search/?act=s&f=cichlidae (如有必要,加上/page/3/ )。
我不能使用$_POST,因为我不能让WordPress paged变量处理$_POST值。
提前谢谢你,
发布于 2012-04-09 05:17:34
为什么不使用jQuery的serialize方法来收集字符串中的所有表单值?
$('form').submit(function() {
var string = $(this).serialize();
window.location.href = '/advanced-search/'+string;
});它遍历所有的表单元素,收集它们的值,并将其转换为可读的字符串格式,以便在URL中使用。
发布于 2012-04-09 05:15:01
不是内置到表单中,否-如果字段存在,它将被发送。
您可以使用Javascript提交表单,从而省略空字段。
发布于 2012-04-09 05:17:21
不,没有JavaScript是没有办法的。如果有,这将是特定于浏览器的,因为是浏览器决定如何处理表单数据。
此外,还有以下内容:
foo.php?a=...and此命令:
foo.php...is在语义上不同。在前者中,通过一个空字符串传递a (""),而在后者中,根本不传递a (null)。
此外,POST在这里是正确的,因为表单是一个搜索表单,因此它正在检索数据,应该使用GET;而不是像Wordpress应该做的那样创建数据。
改变这一点的一种方法(不使用JavaScript)是使用网关脚本,该脚本从URL中删除空参数并重定向。
每个示例:
$newGET = array();
foreach ($_GET as $key => $value) {
if ($value !== '') $newGET[$key] = $value;
}
header('Location: some/url?'.http_build_query($newGET));
exit;https://stackoverflow.com/questions/10066558
复制相似问题