nav分隔線 nav分隔線

使用jQuery和Ajax創建互動式網頁連動下拉選單

icon_fb icon_twitter icon_google
使用jQuery和Ajax創建互動式網頁連動下拉選單

文、意如老師

 

 

在現代網頁開發中,實現一個優雅且互動式的使用者體驗是至關重要的,而在這其中,下拉選單是一個常見的元素,用於讓使用者選擇特定的選項或篩選內容。然而,當我們需要實現多層次的選擇時,例如台灣縣市和鄉鎮的選擇,該如何讓它變得更加智慧且方便呢?

 

在本文中,將帶你一起探索如何使用JQuery與Ajax技術實現台灣縣市及鄉鎮的連動下拉選單,通過這種互動式網頁體驗,你的使用者將能夠更輕鬆地選擇所需的地區,獲得更加便利且直觀的操作。

 

本篇文章將學習如何使用 JavaScript 和 Ajax 技術來實現一個互動式的網頁體驗,我們將以台灣縣市及其鄉鎮為例,透過兩層下拉選單的形式,讓使用者輕鬆選擇所需的地區。

 

🔹 深入學習實用的前端開發技術,掌握從零到一架設網站,成功轉職工程師!🔹

👉🏻 點我領取【Frontend前端開發】課程資訊💞

 

首先,我們將學會如何透過Ajax請求,從提供台灣縣市資料的API中獲取相關資訊,透過這個過程,我們可以將台灣的各個縣市名稱顯示在第一層選單中,提供使用者選擇的機會。接著,我們將學習如何根據使用者選擇的縣市,動態生成第二層選單,透過第二層選單,使用者可以選擇所選縣市下屬的各個鄉鎮地區。

 

在實作中,我們將特別關注不同瀏覽器的支援度,由於各家瀏覽器有時會實現 CSS 屬性的不同版本,為了確保網頁在各種瀏覽器中都能正確顯示,我們將使用各家瀏覽器的前綴詞,來處理兼容性問題。這樣一來,無論使用者使用的是 Firefox、Safari、Chrome、Opera還是Internet Explorer,都能順利地體驗到我們設計的互動效果。最後,我們將運用JavaScript來實現簡單的提示功能,當使用者完成兩層選擇後,網頁將顯示用戶所選的縣市和鄉鎮,讓使用者清楚了解自己所選擇的地區。

 

通過這個實作範例,您將深入了解如何運用 JavaScript 和 Ajax,以及如何建立互動式的下拉選單,提供更好的使用者體驗。無論您是網頁開發初學者還是有一定程度的程式經驗,這個範例都將讓您更加熟悉這些技術,並為未來開發更多功能豐富的互動式網頁奠定堅實基礎。讓我們一同探索,如何實現一個令人印象深刻的互動式網頁體驗!

 

完整程式碼範例:https://codepen.io/yiruatstudio/pen/GRqVZvV

 

 

 

實作開始:

首先,讓我們準備好縣市及鄉鎮的 API:https://raw.githubusercontent.com/donma/TaiwanAddressCityAreaRoadChineseEnglishJSON/master/CityCountyData.json

 

您可以將這個 API 複製到網址列中,查看其中的內容,它包含了台灣各個縣市及其鄉鎮的資訊。

 

接下來,我們將使用 JavaScript 與 Ajax 技術來獲取這個 API 中的資料,並以兩層下拉選單的形式呈現給使用者。讓我們一步一步地進行實作,打造一個互動式且智慧的選擇系統。

 

現在,讓我們開始實作這個連動下拉選單的功能吧!

 

 

 

 步驟一:製作 HTML 網頁 

 

首先,我們要製作 HTML 網頁,用於展示互動式的下拉選單,在這個網頁中,我們需要引入 jQuery 庫,這將幫助我們處理網頁上的動態操作。

 

 

 

 

讓我們建立一個基本的 HTML 結構,並在 <head> 標籤中引入 jQuery:

<!DOCTYPE html>

<html>

<head>

    <title>互動式下拉選單</title>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

</head>

<body>

    <!-- 這裡將放置互動式下拉選單的內容 -->

</body>

</html>

 

 

在上面的程式碼中,我們引入了 jQuery 的 CDN,這樣我們就可以在網頁中使用 jQuery 的功能了。

 

接下來,我們將在 <body> 標籤中建立一個容器,用於放置互動式下拉選單的內容。在這個容器中,我們將創建兩個 <select> 標籤,分別用於顯示縣市和鄉鎮的選項。

 

程式碼:

<!DOCTYPE html>

<html>

<head>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

</head>

<body>

    <h2>台灣縣市 API:</h2>

    <p>第一層選單</p>

    <select id="city" name="city">

        <option value="">請選擇</option>

    </select>

    <br>

    <p>第二層選單 (先隱藏,選完第一層後再出現)</p>

    <select id="area" name="area" style="display:none;">

        <option value="">請選擇</option>

    </select>

</body>

</html>

 

 

在這段 HTML 程式碼中,我們引入了 jQuery 庫,並建立了一個網頁,其中包含兩個下拉選單。

 

第一個下拉選單用於選擇台灣的縣市,而第二個下拉選單則用於選擇該縣市下的鄉鎮。

 

初始狀態下,第二個選單被設置為隱藏,只有在選擇完第一個選單後,它才會顯示出來,這樣的設計讓使用者界面更為簡潔且易於操作。

 

我們在 <select> 標籤中加入了一個預設的 <option>,用於提示使用者進行選擇。在後續的步驟中,我們將使用 jQuery 和 Ajax 技術,動態地將縣市和鄉鎮的選項填入這兩個下拉選單中,使得使用者能夠方便地進行選擇。

 

透過這樣的設計,我們能夠提供更佳的使用者體驗,讓用戶能夠輕鬆完成兩層選單的選擇,並獲得更直觀和便捷的操作。

 

在接下來的步驟中,我們將深入學習如何使用 jQuery 和 Ajax 技術,透過請求 API 來獲取台灣縣市和鄉鎮的資料,並將這些資料動態地填入下拉選單中。讓我們繼續進入步驟二,一起實現連動下拉選單的功能。

 

 

步驟二:JavaScript Ajax 技術來實現網頁的動態操作

 

在這一步中,我們將使用JavaScript和Ajax技術來實現網頁的動態操作,使得下拉選單可以根據使用者的選擇而動態地改變選項。具體來說,我們將透過Ajax請求來獲取台灣縣市和鄉鎮的資料,並將這些資料填入下拉選單中。

 

首先,我們需要在 JavaScript 中使用 jQuery 的 $.ajax() 函式來進行Ajax 請求,我們將發送一個 GET 請求到台灣縣市資料的 API,獲取相關資訊,在成功接收到資料後,我們可以利用回調函式來處理這些資料。

 

接下來,我們使用 $.each() 函式來遍歷這些資料,並將台灣的各個縣市名稱填入第一層選單,這樣一來,使用者就可以在第一層選單中選擇所需的縣市。

 

在第一層選單的 change 事件中,我們可以獲取使用者選擇的縣市名稱,並再次使用 Ajax 請求,獲取該縣市下的所有鄉鎮資料。同樣地,我們將使用 $.each() 函式來遍歷這些鄉鎮資料,並將它們填入第二層選單中。

 

此時,第二層選單將會動態地顯示所選縣市下的所有鄉鎮,使用者可以在第二層選單中選擇所需的鄉鎮。

 

<script>

    $(document).ready(function(){

 

        // 第一層選單

        $.ajax({

            url: 'https://raw.githubusercontent.com/donma/TaiwanAddressCityAreaRoadChineseEnglishJSON/master/CityCountyData.json',

            type: "get",

            dataType: "json",

            success: function (data) {

                console.log(data);

                // 使用 $.each 遍歷資料,將縣市名稱填入第一層選單中

                $.each(data, function (key, value) {

                    console.log(key, value)

                    $('#city').append('<option value="' + key + '">' + data[key].CityName + '</option>')

                })

            },

            error: function (data) {

                alert("讀取資料失敗");

            }

        });

 

        // 第二層選單

        $("#city").change(function(){

            cityvalue = $("#city").val();  // 取得使用者選擇的縣市

            $("#area").empty(); // 清空上次的值

            $("#area").css("display", "inline"); // 顯示第二層選單

            $.ajax({

                url:'https://raw.githubusercontent.com/donma/TaiwanAddressCityAreaRoadChineseEnglishJSON/master/CityCountyData.json',

                type:"get",

                dataType:"json",

                success:function(data){

                    eachval = data[cityvalue].AreaList; // 取得所選縣市的鄉鎮資料

                    // 使用 $.each 遍歷資料,將鄉鎮名稱填入第二層選單中

                    $.each(eachval, function (key, value) {

                        $('#area').append('<option value="' + key + '">' + eachval[key].AreaName + '</option>')

                    });

                },

                error:function(){

                    alert("讀取資料失敗");

                }

            });

        });

 

        // 選完後跳出選擇值

        $("#area").change(function(){

            cityvalue = $("#city").val();  // 縣市

            areavalue = $("#area").val();  // 鄉鎮

            $.ajax({

                url:'https://raw.githubusercontent.com/donma/TaiwanAddressCityAreaRoadChineseEnglishJSON/master/CityCountyData.json',

                type:"get",

                dataType:"json",

                success:function(data){

                    const cityname = data[cityvalue].CityName; // 取得所選縣市名稱

                    const areaname = data[cityvalue].AreaList[areavalue].AreaName; // 取得所選鄉鎮名稱

                    const selected = cityname + "-" + areaname; // 組合縣市與鄉鎮名稱

                    alert("您選擇的是:" + selected); // 顯示提示框,顯示所選的縣市與鄉鎮

                },

                error:function(){

                    alert("讀取資料失敗");

                }

            });

        });

    });

</script>

 

 

首先,我們透過Ajax請求獲取了台灣縣市及其對應的鄉鎮資料,並將縣市名稱顯示在第一層選單中。接著,當用戶選擇了特定的縣市後,第二層選單會根據所選縣市顯示該縣市下的所有鄉鎮選項。最後,當用戶選擇完兩層選單後,網頁會彈出一個提示框,顯示用戶所選的縣市和鄉鎮。使用了 JavaScript 和 Ajax 技術,通過 jQuery 提供的 $.ajax() 函式來進行 Ajax請求。首先,我們在 $(document).ready() 函式內進行了兩個 Ajax 請求,分別用於獲取台灣縣市及其鄉鎮資料。

 

在第一個 Ajax 請求中,我們成功地取得了台灣縣市的資料並使用 $.each() 函式來遍歷資料,將縣市名稱填入第一層選單中。接著,我們為第一層選單的change事件綁定了一個回調函式,當使用者選擇了特定的縣市後,第二層選單會根據所選縣市動態地顯示相對應的鄉鎮選項,在這個回調函式中,我們使用第二個 Ajax 請求來取得該縣市下的所有鄉鎮資料,並使用 $.each() 函式將鄉鎮名稱填入第二層選單中。最後,我們為第二層選單的 change 事件綁定了另一個回調函式。當使用者選擇完兩層選單後,我們取得所選的縣市和鄉鎮名稱,並將它們組合在一起,顯示在提示框中,讓使用者清楚了解自己所選的地區。

 

透過這樣的互動方式,用戶能夠快速且方便地選擇台灣縣市及其下屬的鄉鎮,使得整個網頁選擇過程更加直觀和流暢。這個實作範例將讓您更深入了解如何運用 JavaScript 和 Ajax 技術,並建立互動式的下拉選單,提供更好的使用者體驗,無論您是網頁開發初學者還是有一定程度的程式經驗,這個範例都將讓您更加熟悉這些技術,並為未來開發更多功能豐富的互動式網頁奠定堅實基礎。

 

 

完整程式碼:

<html>

<head>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

 

</head>

<body>

https://raw.githubusercontent.com/donma/TaiwanAddressCityAreaRoadChineseEnglishJSON/master/CityCountyData.json<br>

台灣縣市 API:<br>

第一層選單

<select id = "city" name="city">

    <option value = "">請選擇</option>

</select>

<br>

第二層選單(先隱藏,選完第一層後再出現)

<select id = "area" name="area" style="display:none;">

    <option value = "">請選擇</option>

</select>

 

</body>

</html>

 

<script>

$(document).ready(function(){

 

        //第一層選單

    $.ajax({

        url: 'https://raw.githubusercontent.com/donma/TaiwanAddressCityAreaRoadChineseEnglishJSON/master/CityCountyData.json',             

        type: "get",

                dataType: "json",

        success: function (data) {

                        console.log(data);

                        $.each(data,function(key,value){

                                console.log(key,value)

                                $('#city').append('<option value="'+key+'">'+data[key].CityName+'</option>')

                        })

                },

        error: function (data) {

            alert("fail");

        }

    });

               

        //第二層選單

        $("#city").change(function(){

                cityvalue=$("#city").val();  //取值

                $("#area").empty(); //清空上次的值

                $("#area").css("display","inline"); //顯現

                $.ajax({

                url:'https://raw.githubusercontent.com/donma/TaiwanAddressCityAreaRoadChineseEnglishJSON/master/CityCountyData.json',

                        type:"get",

                        dataType:"json",

                        success:function(data){

                       

                                eachval=data[cityvalue].AreaList; //鄉鎮

                               

                                $.each(eachval,function(key,value){

                                        $('#area').append('<option value="'+key+'">'+eachval[key].AreaName+'</option>')

                                });

                        },

                        error:function(){

                                alert("fail");

                        }

                       

                });

        });

       

        //選完後跳出選擇值

        $("#area").change(function(){

                cityvalue=$("#city").val();  //縣市

                areavalue=$("#area").val();  //鄉鎮

                $.ajax({

                url:'https://raw.githubusercontent.com/donma/TaiwanAddressCityAreaRoadChineseEnglishJSON/master/CityCountyData.json',

                        type:"get",

                        dataType:"json",

                        success:function(data){

                                alert(data[cityvalue].CityName+"-"+data[cityvalue].AreaList[areavalue].AreaName);

                        },

                        error:function(){

                                alert("fail");

                        }

                       

                });

        })

       

});

</script>

 

通過本文的學習,我們成功地實現了一個互動式的網頁下拉選單,讓使用者能夠輕鬆選擇台灣縣市和鄉鎮。這展示了JQuery和Ajax技術在提升網頁使用者體驗方面的威力。經過這次實作,你已經熟悉了如何使用JQuery的選擇器來操作DOM元素,以及如何使用Ajax來處理網頁的非同步請求。

 

現在,你可以將這些知識應用於更多有趣的專案,打造更多創意的互動元素,讓你的網頁更加生動有趣。

 

📖 延伸閱讀:不用寫程式,也可以製作兩層以上連動的下拉式選單

 

👉我也想成為工程師👈

 

 

 

 

FB粉絲團:https://www.facebook.com/lccnetzone
YouTube頻道:https://www.youtube.com/user/LccnetTaiwan

痞客邦Blog:http://lccnetvip.pixnet.net/blog

本網站使用相關網站技術以確保使用者獲得最佳體驗,通過使用我們的網站,您確認並同意本網站的隱私權政策。欲了解詳情,請參閱 隱私權政策