【问题标题】:Parsing selected value in drop down to next page解析下拉到下一页中的选定值
【发布时间】:2015-02-20 18:53:59
【问题描述】:

我正在尝试通过 http 请求将下拉列表的当前选择值解析到下一页 - 因此选择的值通过 url 解析到下一页。

表单下拉列表如下所示:

<form name="sortby">
    <select id="order_by" name="order_by" onchange="sortBy()">
        <option<?php if(isset($_GET['order_by']) && $_GET['order_by'] == 'choose') echo ' selected="selected"'; ?> value="choose">Sort By</option>
        <option<?php if(isset($_GET['order_by']) && $_GET['order_by'] == 'OVERALL_VALUE') echo ' selected="selected"'; ?> value="OVERALL_VALUE">Most Popular</option>
        <option<?php if(isset($_GET['order_by']) && $_GET['order_by'] == 'PRICE') echo ' selected="selected"'; ?> value="PRICE">Price (low to high)</option>
        <option<?php if(isset($_GET['order_by']) && $_GET['order_by'] == 'PRICE_REVERSE') echo ' selected="selected"'; ?> value="PRICE_REVERSE">Price (high to low)</option>
        <option<?php if(isset($_GET['order_by']) && $_GET['order_by'] == 'QUALITY') echo ' selected="selected"'; ?> value="QUALITY">Rating</option>
    </select>
</form>

这是我想将所选值发布到下一页的位置 - 通过按钮:

echo "&nbsp;<button><a href=\"$PHP_SELF?go&s=$news&cacheKey=$cacheKey&cacheLocation=$cacheLocation&customerSessionId=$customerSessionId&name=" . strval($_GET['name']) . "&arrival=" . strval($_GET['arrival']) . "&departure=" . strval($_GET['departure']) . "&rooms=" . strval($_GET['rooms']) . "&numberOfGuests=" . strval($_GET['guests']) . "&order_by=" . $_GET['order_by'] . "\">Next &gt;&gt;</a></button>"; 

所以它说 &order_by=" . $_GET['order_by'] . 是我想将当前选定的值解析到下一页的地方。但是我没有使用此 Get 方法获取 url 中的值 -我做错了什么?

【问题讨论】:

  • 您似乎正在尝试通过 URL 传递变量来构造 SQL 语句?!?!
  • 看来你需要使用 Javascript,如果你想在不使用表单的情况下改变它。但是如果你想使用表单,那么对你的数据使用隐藏的输入。

标签: javascript php jquery html


【解决方案1】:

使用http_build_query() 清理它。像这样使用它:

$data = array('foo'=>'bar',
              'baz'=>'boom',
              'cow'=>'milk',
              'php'=>'hypertext processor');

echo http_build_query($data) . "\n";
//OUTPUT: foo=bar&baz=boom&cow=milk&php=hypertext+processor

echo http_build_query($data, '', '&amp;');
//OUTPUT: foo=bar&amp;baz=boom&amp;cow=milk&amp;php=hypertext+processor

或者,使用 JS 你可以这样做:

function getCurrentParams() {
    var url = document.URL;
    var url_split = url.split("?");
    var params = url_split[1];
    return params;
}

function urlToObj(url) {
    var obj = {};
    var pairs = url.split('&');
    for (i in pairs) {
        var split = pairs[i].split('=');
        obj[decodeURIComponent(split[0])] = decodeURIComponent(split[1]);
    }
    return obj;
}

function getQuery(e){ // will fire on button click
    var value = $("#order_by").val();
    var params_string = getCurrentParams();
    var get_params_obj = urlToObj(params_string);
    get_params_obj.orderBy= value;
    var params = $.param(get_params_obj);
    alert(params);
    location.href = "http://youbaseurl.com?"+params;
    return false;
}

HTML:

<button onclick="return getQuery(this)"></button>

【讨论】:

  • 很难理解如何使用您的 JS 示例。如何将 JS 检索到的值放入按钮中的 url 调用中? @CodeGodie
  • 它确实可以工作到我从下拉排序中收到警报值的范围内。但它不会转到我收到警报的网址。如何让函数 getQuery 真正转到创建的 url?
  • 您必须强制使用location.href。我更新了代码
  • 没问题。很高兴我能帮上忙
【解决方案2】:

只需放置一个提交按钮而不是标签并单击它。它将通过 get 方法发送选定的值。并确保你在表单元素中定义动作属性

        <form action="">
        <select>
       .....................  
       </select>
        <input type="submit" name="submit">
        </form>

【讨论】:

  • 这行不通,因为他需要查询中的所有其他数据。为了让它在没有 JS 的情况下工作,他需要使用许多隐藏的输入。
猜你喜欢
  • 1970-01-01
  • 2020-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-09
  • 1970-01-01
  • 2019-12-09
  • 1970-01-01
相关资源
最近更新 更多