jquery跳转菜单在“?”后删除所有内容

时间:2012-07-11 22:35:05

标签: jquery

我找到了一个简单的跳转菜单。它工作得很好,直到我想要它去一个带有“?”的页面。在网址中。它删除了“?”之后的所有内容。 所以当我尝试去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> 

3 个答案:

答案 0 :(得分:2)

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

  1. GET:参数作为网址的一部分发送(“example.com/?foo=bar”)
  2. POST:参数“在幕后发送”(“example.com”,{foo:bar})
  3. 当您提交请求时(例如,当您$('#site_quick_jump_form').submit()时),您提交的是“?”之后的任何内容。在URL中作为参数。

    * *编辑* *

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

    • 让你的PHP代码只查看所有参数并将它们重新组合成一个URL
    • 使您的JS代码与查询字符串(window.location.search)分开并将其作为单独的字段发送

答案 1 :(得分:0)

所以我找到了答案,不知道为什么会有效,但确实如此。我改变了action =“get”to action =“post”。

答案 2 :(得分: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"提交表单时,表单数据会在?之后附加到网址。没有警告要处理。