如何创建第二个下拉菜单以减小单个下拉菜单列表的大小

时间:2019-07-01 01:32:14

标签: php

我有一个约40个城市名称的下拉菜单,用户可以在其中选择他希望显示天气预报的城市。我需要在此列表中添加更多城市,但恐怕它会变得太大而无法“实用”。

我的想法是按国家/地区组织城市,并创建一个新的下拉菜单,以首先选择国家/地区,然后选择城市。

我一直在尝试在类似请求中找到的几种解决方案,但是由于我是初学者,所以我的问题是,当我尝试在数组中包含国家/地区名称并在脚本中进行更改以使可以。

当前脚本如下:

<?php
    $arr = ["city_code1" => "city_name1", 
            "city_code2" => "city_name2", 
            ---
            "city_codei" => "city_namei"] 

    $city = isset($_POST['city']) ? $_POST['city'] : array_keys($arr)[0];
?>

<form name="f" id="a" method="post" action="">
    <select id="city" name="city" onchange="this.form.submit()" >                      
    <?php
        foreach ($arr as $k => $v) {
            echo "<option value='$k'" . ($k == $city ? " selected" : "") . ">$v</option>\n";
        }
    ?>
    </select>
</form>

<?php
    //create url
    $city_name = $arr[$city];
    $fIOURL = "http://www.exemple.com/{$city_name}";

    // check cache
    $city_cache = "cache/{$city_name}.txt";
    $cache_exists = file_exists($city_cache);
    if (!$cache_exists || time() - filemtime($city_cache) > 60 * 60 * 3) { 
        // cache doesn't exist, or is no longer valid
        $rawData = file_get_contents($fIOURL);
        if ($rawData != "") {
            // if we successfully fetched data, recreate the cache
            $cache_exists = file_put_contents($city_cache, $rawData);
        }
    }

    if ($cache_exists) {
        // fetch the data (either cached or freshly loaded) from the cache file
        $rawData = file_get_contents($city_cache);
        $forecastLoadedTime = filemtime($city_cache);
    }
    else {
        // some sort of error message here
        $rawData = "Error no forecast available for $city_name!";
    }

    $decoded = json_decode($rawData, true); 

如何添加国家/地区下拉菜单并更改代码以反映这一点? 提前非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

选项1: 在国家/地区和国家/地区选择输入的j onchange事件中处理此问题的简单方法,并应用您的逻辑。我在这里摆弄一些关于在选择一个国家时动态获取州的信息,您也许可以自己编写其余代码-Fiddle

选项2 :选择国家/地区时实现了ajax功能。更改国家/地区后,您可以通过Ajax发送请求,以从另一个php文件中获取城市详细信息,然后更新第二个下拉列表。这是示例example1example2