1

我找到了一个简单的跳转菜单。在我希望它转到带有“?”的页面之前,它工作得很好。在网址中。它会删除“?”之后的所有内容。因此,当我尝试转到 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:&nbsp; 
  <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> 
4

3 回答 3

2

好的,这需要对网络上的参数进行快速解释。当您发出请求时,您可以通过两种方式发送参数:

  1. GET:参数作为 URL 的一部分发送(“example.com/?foo=bar”)
  2. POST:参数在“幕后”发送(“example.com”,{foo:bar})

当您提交请求时(即当您提交请求时$('#site_quick_jump_form').submit()),您提交的是“?”之后的任何内容。在 URL 中作为参数。

* * 编辑 * *

一种可能的解决方案是切换到 POST :) 因为这似乎适用于 OP,所以我不会详细描述其他选项,但您也可以:

  • 让您的 PHP 代码只查看所有参数并将它们重新组合成一个 URL
  • 使您的 JS 代码分离出查询字符串(window.location.search)并将其作为单独的字段发送
于 2012-07-11T22:41:41.297 回答
0

如果您的选项中唯一改变的是查询字符串,您可以通过将操作硬编码到表单中并将您的选项更改为仅指定查询字符串值来简化这一点。

$(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 之后的?. 没有要处理的警告。

于 2012-07-12T00:19:48.423 回答
0

所以我找到了答案,不知道为什么它有效,但它确实有效。我将 action="get" 更改为 action="post"。

于 2012-07-11T22:41:56.697 回答