我找到了一个简单的跳转菜单。它工作得很好,直到我想把它转到url中有"?"的页面。它去掉了"?"之后的所有内容。所以当我尝试转到mywordpresspage/时?id=1,跳转菜单将带我进入mywordpresspage/。
我对jquery了解不多。。。我主要使用php。
这是代码:
<script type="text/javascript" charset="utf-8">
$(document).ready(function() {
$('.site_quick_jump').change(function(){
if ($(this).val() != '') {
$('#site_quick_jump_form').attr('action', $(this).val()); //
$('#site_quick_jump_form').submit(); // Go!
}
});
}); // doc ready
</script>
<form id="site_quick_jump_form" method="get" action="">
Browse Survey:
<select class="site_quick_jump">
<option></option>
<option value="mywordpresspage/?id=1">My WordPress Page 1</option>
<option value="mywordpresspage/?id=2">My WordPress Page 2</option>
<option value="mywordpresspage/?id=3">My WordPress Page 3</option>
</select>
</form>
好的,这需要对web上的参数进行快速解释。当你提出请求时,yuo可以通过两种方式发送参数:
- GET:参数作为URL的一部分发送("example.com/?foo=bar")
- POST:参数是在"后台"发送的("example.com",{foo:bar})
当您提交请求时(即当您$('#site_quick_jump_form').submit()
时),您将提交URL中"?"之后的任何内容作为参数。
**编辑**
一个可能的解决方案是切换到POST:)由于这似乎适用于OP,我不会详细描述其他选项,但您也可以使用:
- 让您的PHP代码只查看所有参数,然后将它们重新组装到URL中
- 使JS代码分离出查询字符串(window.location.search),并将其作为单独的字段发送
所以我找到了答案,不知道为什么它有效,但它确实有效。我把action="get"改成了action="post"。
如果选项中唯一更改的是querystring,则可以通过将操作硬编码到表单中并更改选项以仅指定querystring值来简化此操作。
$(function () {
$('.site_quick_jump').change(function () {
if (this.value) {
this.form.submit();
}
});
});
<form id="site_quick_jump_form" method="get" action="mywordpresspage">
Browse Survey:
<select class="site_quick_jump" name="id">
<option></option>
<option value="1">My WordPress Page 1</option>
<option value="2">My WordPress Page 2</option>
<option value="3">My WordPress Page 3</option>
</select>
</form>
解释:
提交表单时,表单数据是通过将表单的每个元素名称与其对应的值(用=
分隔)组合来创建的。将这些名称-值对中的每一个与&
组合以形成最终的表单数据。
当使用method="post"
提交表单时,该数据会被填充到http请求的主体中。如果用户随后尝试刷新页面,他们将收到一条警告,说明他们即将重新提交表单。如果用户单击"上一步"按钮返回页面,则会收到页面已过期的警告。您不希望用户收到这些警告。
但是,当使用method="get"
提交表单时,表单数据会附加到?
之后的URL。没有需要处理的警告。