javascript - 根据动态选择框的更改更改 URL

标签 javascript jquery ajax json html

我有一个从 JSON 文件填充的选择框,我想重新加载 URL 但传递选择框中的值。

这是我的 index.html 文件的精简版

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Timetables</title>

    <!-- Bootstrap -->
    <link href="css/bootstrap.min.css" rel="stylesheet">


    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
</head>
<body>

<nav class="navbar navbar-inverse navbar-fixed-top">
    <div class="container">
        <div id="navbar" class="navbar-collapse collapse">

        </div>
        <!--/.navbar-collapse -->
    </div>
</nav>

<!-- Main jumbotron for a primary marketing message or call to action -->
<div class="jumbotron">
    <div class="container">
        <div id="headerArea">

        </div>
    </div>
</div>

</body>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script>

    var $crs = GetURLParameter('crs');

    // Function that uses this variable removed as not relevant

    $.getJSON('csr.json', function (data) {
        var stationDropdown = '<form class="navbar-form navbar-right" action="">';
        stationDropdown += '<select class="form-control" id="stations">';
        for (var i in data) {
            stationDropdown += '<option value="' + data[i].Code + '">' + data[i].StationName + '</option>';
        }
        stationDropdown += '</select>';
        stationDropdown += '</form>';

        $("#navbar").html(stationDropdown);
    });

    $(function(){
        // bind change event to select
        $('#stations').bind('change', function () {
            var url = $(this).val(); // get selected value
            if (url) { // require a URL
                window.location = 'index.html?crs='.url; // redirect
            }
            return false;
        });
    });

</script>

</html>

这是一个 JSON 示例

[
  {
    "StationName":"Abbey Wood",
    "Code":"ABW"
  },
  {
    "StationName":"Aber",
    "Code":"ABE"
  }
]

选择框生成正常并“注入(inject)(?)到导航栏 div 中,但更改事件不会注册

基本上,如果有人选择 Aber,onchange 事件将自动重新加载 index.html?crs=ABE。

开发工具没有抛出任何错误,它只是在我更改选择框时没有做任何事情。

我怀疑我需要将 on change 事件作为一个函数运行,该函数在需要时专门调用,因为将它放在 index.html 文件的底部意味着它会在 DOM 准备好之前加载?

在此先感谢您的帮助。

最佳答案

您应该将所有 HTML 构建移入 HTML。

在您的 getJSON() 中,您可以将该代码缩减为:

var stations = $( '#stations' );
for (var i in data) {
    stations.append( '<option value="' + data[i].Code + '">' + data[i].StationName + '</option>' );
}

一旦你这样做了,其他一切都应该正常工作。这是我在您的 HTML 中所做的更改:

<div id="navbar" class="navbar-collapse collapse">
    <form class="navbar-form navbar-right" action="">
        <select class="form-control" id="stations">
            <option>Select One</option>
        </select>
    </form>
</div>

另外,作为一个注释。从 1.7 开始,jQuery 建议使用 on() 方法而不是 bind() 方法。

http://api.jquery.com/bind/

关于javascript - 根据动态选择框的更改更改 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28504023/

相关文章:

javascript - Froala Font-Size Popup 方向错误

jquery - 发送回 json 字符串并出现 echo 问题

php - PHP 跨域的 Ajax GET 响应

javascript - 从 javascript 数组拼接 2 个键的最佳方法

javascript - 如何将变量和数据从 PHP 传递到 JavaScript?

Javascript Fetch api [对象对象]

javascript - JQuery position() 和 offset() 方法不起作用

javascript - 对 li 元素进行排序而不破坏子列表

javascript - JQuery 是否可以在 ul 元素为空时显示消息并隐藏项目的添加?

javascript - 将 Node.js GET/POST 请求更改为 Ajax