一、bootstrap-select輸入選擇框


一、bootstrap-select簡單使用

<!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>
            bootstrap 搜索下拉框
        </title>
        <!-- jquery -->
        <script src="http://cdn.staticfile.org/jquery/2.1.1/jquery.min.js" type="text/javascript">
        </script>
        <!-- bootstrap -->
        <link href="http://cdn.staticfile.org/twitter-bootstrap/3.3.1/css/bootstrap.min.css"
        rel="stylesheet">
        <script src="http://cdn.staticfile.org/twitter-bootstrap/3.3.1/js/bootstrap.min.js"
        type="text/javascript">
        </script>
        <!-- bootstrap-select -->
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.12.4/css/bootstrap-select.min.css">
        <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.12.4/js/bootstrap-select.min.js">
        </script>
        <style type="text/css">
            .panel-default{ }
        </style>
    </head>
    
    <body>
        <div class="container-fluid form-horizontal">
            <div class="panel panel-default">
                <div class="panel-body">
                    <div class="form-group">
                        <label for="firstname" class="col-sm-2 control-label">
                            搜索
                        </label>
                        <div class="col-sm-10">
                            <!--下拉搜索框-->
                            <select name="queryDevice" id="queryDevice" class="queryDevice selectpicker form-control"
                            data-live-search="true">
                                <option value="">
                                    請選擇
                                </option>
                            </select>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </body>
    <script type="text/javascript">
        $("#queryDevice").on('shown.bs.select',
        function(e) {
            console.log('展開之后');
            $('#queryDevice').prev().find("input").keydown(function() {
                $('#queryDevice').prev().find("input").attr('id', "deviceInput"); //為input增加id屬性
                console.log($('#deviceInput').val()); //獲取輸入框值輸出到控制台
            })
        })
    </script>

</html> 

注:

1、按下keydown事件,但是並為獲取keydown下的字母到,也是因為這個原因第一個按下獲取的並控制台輸出的是空。   

解決方式:keyup替換keydown即可。

2、持續輸入內容改變,去后台請求數據重新渲染列表,導致請求過於頻繁,頁面列表不斷改變(沒看清楚列表停頓,就因請求輸入的方式改變),體驗感不好。

解決方式:(在連續輸入停頓直接設卡點,例如:內容改變的時候連續輸入過程中停頓不超過0.5秒的過程中不必每次去請求,以最后一次為准即去請求,而當內容改變超過0.5就直接去請求即可。)。 

3、第一次請求耗時一秒,第二次請求耗費0.1秒,會導致兩個請求幾乎同時到前台,會出現用戶體驗差。

解決方式:當第一次請求而未響應,那么發出第二次請求就會忽略和覆蓋之前的請求。

具體思路:

如果寫成 obj.onkeyup = function() {
setTimeout(function() {開始搜。。。。}, 700);
}
這樣的寫法是有問題的,因為這樣和沒寫定時器是一樣的,還會發送每個請求,只是每個請求隔 了700毫秒而已。
所以,思路: 定義一個定時器, 每次keyup時先做個判斷,若是上次的定時器沒有完成,那就清空定時器,然后再重啟,直到上次的完成了重啟的才可以用。

以下是解決方式250毫秒觸發到連續就不會去請求,但是這樣請求堵塞還是沒有解決即第一次請求未響應的時候,后面的請求則覆蓋該請求和忽略響應。

<!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>
            bootstrap 搜索下拉框
        </title>
        <!-- jquery -->
        <script src="http://cdn.staticfile.org/jquery/2.1.1/jquery.min.js" type="text/javascript">
        </script>
        <!-- bootstrap -->
        <link href="http://cdn.staticfile.org/twitter-bootstrap/3.3.1/css/bootstrap.min.css"
        rel="stylesheet">
        <script src="http://cdn.staticfile.org/twitter-bootstrap/3.3.1/js/bootstrap.min.js"
        type="text/javascript">
        </script>
        <!-- bootstrap-select -->
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.12.4/css/bootstrap-select.min.css">
        <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.12.4/js/bootstrap-select.min.js">
        </script>
        <style type="text/css">
            .panel-default{ }
        </style>
    </head>
    <body>
        <div class="container-fluid form-horizontal">
            <div class="panel panel-default">
                <div class="panel-body">
                    <div class="form-group">
                        <label for="firstname" class="col-sm-2 control-label">
                            搜索
                        </label>
                        <div class="col-sm-10">
                            <!--下拉搜索框-->
                            <select name="queryDevice" id="queryDevice" class="queryDevice selectpicker form-control"
                            data-live-search="true">
                                <option value="">
                                    請選擇
                                </option>
                            </select>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </body>
    <script type="text/javascript">
        var timer = 0;//定義一個全局變量
        $("#queryDevice").on('shown.bs.select',
        function(e) {
            console.log('展開之后');
            $('#queryDevice').prev().find("input").keyup(function() {
                $('#queryDevice').prev().find("input").attr('id', "deviceInput"); //為input增加id屬性
                //只是將請求減少了四次。
                //這種單純是以內容改變后每隔250毫秒才去請求,如果連續250只要觸發連續就不去請求,但是這種方式是保持250毫秒一次請求頻率。
                clearTimeout(timer);
                timer = setTimeout(function() {
                    console.log($('#deviceInput').val()); //獲取輸入框值輸出到控制台
                },
                250);
            })
        })
    </script>
</html>

 


免責聲明!

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



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