jQuery.js 實現 聯動


使用jQuery實現聯動效果

應用場景:收貨地址

1、准備三個下拉框
<select class="changeArea" id='province'>
    <option value="" > --請選擇-- </option>
</select>
<select class="changeArea" id="city">
    <option value="" > --請選擇-- </option>
</select>
<select class="changeArea" id="area">
    <option value="" > --請選擇-- </option>
</select>
2、由於架構是前后端分離、所以使用Ajax發送請求獲取省份數據、然后渲染
<script>
    // 頁面初始化的是時候、調用此方法
    getList( 0, '#province' )

    // 公共方法 - 獲取數據
    function getList( id, position )
    {
        $.ajax({
            method: 'get',
            url: "http://www.test.com/index.php/region/getList",
            data: {
                id:id
            },
            dataType: 'json',
            success: function( res )
            {
                // 判斷返回的結果
                if( res.code == 0 )
                {
                    var str = ' <option value=""> --請選擇-- </option>'
                    $( res.data).each( function( k,v ){
                        str += ' <option value="'+v.id+'">'+v.name+'</option>'
                    })
                    $( position ).html( str )
                }
            }
        })
    }
</script>
3、由於頁面到現在只實現了第一個下拉框省份的數據、要實現省份發生改變的時候、城市也發生改變、為了減少代碼的冗余、直接調用js公共方法
$(document).on('change', '.changeArea', function(){
    var id = $(this).val()
    var position = $(this).next().prop('id')
    getList( id, '#'+position )
})
4、實現如上之后、發現數據改變的還存在問題、省份改變之后、之前選擇的地區數據依舊還在、為了解決、使用如下代碼
$(this).nextAll().html( '<option value=""> --請選擇-- </option>' )
5、最終實現、效果如下:

6、最終的代碼如下:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title> 聯動 </title>
</head>
<body>
    <select class="changeArea" id='province'>
        <option value="" > --請選擇-- </option>
    </select>
    <select class="changeArea" id="city">
        <option value="" > --請選擇-- </option>
    </select>
    <select class="changeArea" id="area">
        <option value="" > --請選擇-- </option>
    </select>
</body>
</html>
<script src="__STATIC__/jquery-3.3.1.js"></script>
<script>

    // 頁面初始化的是時候、調用此方法
    getList( 0, '#province' )

    // 下拉框的改變事件
    // 1、獲取數據id
    // 2、獲取當前下拉框之后的第一個兄弟節點的id
    // 3、將當前下拉框之后的所有兄弟節點的內容變為請選擇
    // 4、判讀id是否為空、如果為空、則終止執行
    // 5、調用公共方法獲取對應數據
    $(document).on('change', '.changeArea', function(){
        var id = $(this).val()
        var position = $(this).next().prop('id')
        $(this).nextAll().html( '<option value=""> --請選擇-- </option>' )
        if( id == '' )
        {
            return false;
        }
        getList( id, '#'+position )
    })

    // 公共方法 - 獲取數據
    function getList( id, position )
    {
        $.ajax({
            method: 'get',
            url: "http://www.test.com/index.php/region/getList",
            data: {
                id:id
            },
            dataType: 'json',
            success: function( res )
            {
                // 判斷返回的結果
                // 如果狀態碼為0、則表示返回成功、則讓之后的節點顯示、同時、將數據追加
                // 如果狀態碼不是0、則表示返回失敗、則讓之后兄弟節點隱藏
                if( res.code == 0 )
                {
                    $( position ).show()
                    var str = ' <option value=""> --請選擇-- </option>'
                    $( res.data).each( function( k,v ){
                        str += ' <option value="'+v.id+'">'+v.name+'</option>'
                    })
                    $( position ).html( str )
                }else{
                    $( position ).hide()
                }
            }
        })
    }
</script>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM