zoukankan      html  css  js  c++  java
  • 基于Bootstrap的下拉框插件bootstrap-select

    写在前面:

      在这次的项目中,没有再使用liger-ui做为前端框架了,改为了Bootstrap,这次也好接触下新的技术,在学习的过程中发现,Bootstrap的一些组件基本都是采用class的形式,就是给一个它定义好的样式,就会给你展现出一个好看的组件出来,这个比liger-ui的界面做的要好,但是了解了Boostrap的基本语法后,发现在官方的文档中,并没有一些可以动态加载组件的demo,因为之前用的liger-ui,大多数组件都只需要写一行代码,就能很好的,并且很方便的直接与后台进行交互,并动态加载数据。但是bootstrap的文档中并没有这样的例子。毕竟它就是做静态的,只需要给一个样式,那我动态加载数据怎么办?全部自己封装吗?后面查阅资料发现,有许多常用的组件插件是基于bootstrap来进行封装的,这就需要我们如果要使用什么组件,可以单独的再去下载它的插件。这个时候,就可以做到很方便的像后台发送数据进行动态加载了。这里就记录下,一些常用的bootstrap的组件插件吧,首先是下拉框

      基于Bootstrap的下拉框也有好几个,这里我选择了bootstrap-select.js.下面就简单的记录下它的用法吧,主要是动态的加载数据。

      首先还是上代码,毕竟代码最直观。

      前台jsp页面:

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%
      String scheme = request.getScheme();
      String serverName = request.getServerName();
      String contextPath = request.getContextPath();
      int port = request.getServerPort();
    
      //网站的访问跟路径
      String baseURL = scheme + "://" + serverName + ":" + port
              + contextPath;
      request.setAttribute("baseURL", baseURL);
      System.out.println("baseURL:" + baseURL);
    %>
    
    <html>
      <head>
        <meta name="viewport" content="width=device-width" />
        <title>bootstrap-select测试</title>
        <%--导入bootstrap与select样式--%>
        <link rel="stylesheet" type="text/css" href="${baseURL}/Bootstrap/bootstrap/css/bootstrap.min.css" />
        <link href="${baseURL}/Bootstrap/bootstrap-select/css/bootstrap-select.css" rel="stylesheet" />
        <%--先导入jqury插件--%>
        <script src="${baseURL}/Bootstrap/bootstrap/assets/js/jquery-1.10.2.min.js"></script>
        <%--导入bootstrap插件--%>
        <script src="${baseURL}/Bootstrap/bootstrap/assets/js/bootstrap.min.js"></script>
        <%--下拉框插件--%>
        <script src="${baseURL}/Bootstrap/bootstrap-select/js/bootstrap-select.js"></script>
      </head>
      <body>
    
      <label style="font-weight:normal;background-color: #fac090; 80px;text-align: center" >Role</label>
      <%--给一个class=“selectpicker”  改变下拉框的宽度用data-width --%>
      <select id="sel_role" name="role" class="selectpicker" title="请选择" data-width="150px" style="">
      </select>
      </body>
    <script>
        $(function(){
            //初始化下拉框
            //动态加载
            $.ajax({
                type: 'get',
                url: '${baseURL}/listAllRole',
                dataType: "json",
                success: function (data) {
                    //拼接下拉框
                    for(var i=0;i<data.length;i++){
                        $("#sel_role").append("<option value='"+data[i].roleId+"'>"+data[i].roleName+"</option>");
                    }
                    //这一步不要忘记 不然下拉框没有数据
                    $("#sel_role").selectpicker("refresh");
                }
            });
            
        });
    </script>
    </html>

      首先要导入相关的样式以及js插件,由于bootstrap是基于jquery的,故要先导入jquery插件,然后bootstrap-select又是基于bootstrap的。故先导入bootstrap,再导入bootstrap-select.这里要注意下导入的顺序呢。

      对于动态的加载数据,还是要自己进行拼接,然后refresh一下,这个一定不能忘记,不然不会出来数据。由于此次的后台还是ssh框架,故后台查询下拉框的数据,并如何返回json给前台页面,这里就不再详细的说了,之前在ligerui博文中都有写过,并提及过。

      看下效果图吧:

     

      除了常用的单个下拉框外,还有最常见的就是下拉框级联了,这里也写个demo来记录一下,代码如下,也是只上前台jsp页面的代码,后台json数据的传递就不再说了。

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%
      String scheme = request.getScheme();
      String serverName = request.getServerName();
      String contextPath = request.getContextPath();
      int port = request.getServerPort();
      //网站的访问跟路径
      String baseURL = scheme + "://" + serverName + ":" + port
              + contextPath;
      request.setAttribute("baseURL", baseURL);
      System.out.println("baseURL:" + baseURL);
    %>
    <html>
      <head>
        <meta name="viewport" content="width=device-width" />
        <title>bootstrap-select测试</title>
        <%--导入bootstrap与select样式--%>
        <link rel="stylesheet" type="text/css" href="${baseURL}/Bootstrap/bootstrap/css/bootstrap.min.css" />
        <link href="${baseURL}/Bootstrap/bootstrap-select/css/bootstrap-select.css" rel="stylesheet" />
        <%--先导入jqury插件--%>
        <script src="${baseURL}/Bootstrap/bootstrap/assets/js/jquery-1.10.2.min.js"></script>
        <%--导入bootstrap插件--%>
        <script src="${baseURL}/Bootstrap/bootstrap/assets/js/bootstrap.min.js"></script>
        <%--下拉框插件--%>
        <script src="${baseURL}/Bootstrap/bootstrap-select/js/bootstrap-select.js"></script>
      </head>
      <body>
    
      <label style="font-weight:normal;background-color: #fac090; 80px;text-align: center" >Biz Unit</label>
      <select id="sel_bizUnit" name="bUnitId" class="selectpicker" title="请选择" data-width="150px" style="">
      </select>
      &nbsp;&nbsp;&nbsp;
      <label style="font-weight:normal;background-color: #fac090; 80px;text-align: center" >Division</label>
      <select id="sel_division" name="divId" class="selectpicker"title="请选择" data-width="150px" style="">
      </select>
    
      </body>
    <script>
        $(function(){
            //初始化下一级下拉框
            //动态加载
            $.ajax({
                type: 'get',
                url: '${baseURL}/listAllSABusinessUnit',
                dataType: "json",
                success: function (data) {
                    for(var i=0;i<data.length;i++){
                        $("#sel_bizUnit").append("<option value='"+data[i].bUnitId+"'>"+data[i].bUnitName+"</option>");
                    }
                    $("#sel_bizUnit").selectpicker("refresh");
                }
            });
    
            //二级下拉框的选项随一级下拉框的值而改变
            $("#sel_bizUnit").change(function(){
                //根据bUnit去获取Division
                $.ajax({
                    type: 'get',
                    url: '${baseURL}/getSADivisionByBUnit?bUnitId='+$("#sel_bizUnit").val(),
                    dataType: "json",
                    success: function (data) {
                        if(data.length == 0){
                            //如果一级没有对应的二级 则清空二级并 不往下执行
                            $("#sel_division").empty();
                            $("#sel_division").selectpicker("refresh");
                            return ;
                        }
                        //如果一级有对应的二级 则进行拼接
                        //每次拼接前都进行清空
                        $("#sel_division").empty();
                        for(var i=0;i<data.length;i++){
                            $("#sel_division").append("<option value='"+data[i].divId+"'>"+data[i].divName+"</option>");
                        }
                        //这里千万别忘记了
                        $("#sel_division").selectpicker("refresh");
                    }
                });
            });
        });
    </script>
    </html>

      代码都比较简单,基本看下就会了,也就是根据一级下拉框的值去查询获取对应的二级下拉框的值,然后拼接加载出来就完事了。值得注意的点,当一级没有对应的二级时,此时也应该将二级清空并refresh一下,不然当第一次勾选一级a,对应有二级,接着再次选择一级b,没有对应的二级时,还是会显示出一级a对应的二级。所以这个时候也应该清空一下。这些小细节可以按照自己的项目需求来。好了,完事了。

      看下效果图:

      

  • 相关阅读:
    Two strings CodeForces
    Dasha and Photos CodeForces
    Largest Beautiful Number CodeForces
    Timetable CodeForces
    Financiers Game CodeForces
    AC日记——整理药名 openjudge 1.7 15
    AC日记——大小写字母互换 openjudge 1.7 14
    AC日记——将字符串中的小写字母换成大写字母 openjudge 1.7 13
    AC日记——加密的病历单 openjudge 1.7 12
    AC日记——潜伏着 openjudge 1.7 11
  • 原文地址:https://www.cnblogs.com/eleven258/p/9428765.html
Copyright © 2011-2022 走看看