移动端下拉列表适配

背景

移动端开发中,使用select做下拉框,会导致ios Android下各种样式的不统一以及表现形式的不统一等问题,因此很少使用原生的select来做下拉框选择,而是选择自己模拟下拉框来实现。

插件封装

在网上看了一些别人写的代码,基本上都是这样的,拿过来自己鼓捣了下,记下来方便以后直接使用。如有雷同之处,敬请谅解,有哪些可以改进的还希望路过大神不吝指点。
废话不多说,先上代码:

html结构
    <div class="selectBox">
        <input id="course" name="course" type="hidden" value="--请选择--" />
        <div id="courseBox">
            <cite id="courseCite">--请选择--</cite>
            <ul style="display: none;">
                <li data-input-value="html">html</li>
                <li data-input-value="css">css</li>
                <li data-input-value="js">js</li>
            </ul>
        </div> 
    </div>

说明:

  1. html结构中的三处id必须设置;
js插件代码
      jQuery.selectDiv = function(boxId,inputId,bool){ 
        var selectInput = $(inputId);
        var selectCite = $(boxId+" cite");
        // 下拉列表的显示与隐藏
        selectCite.on("tap click", function(){ 
            var $ul = $(this).next("ul");
            if($ul.css("display") == "none"){
                $ul.show();
            }else{
                $ul.hide();
            }
        });
        // 选择框选中后对input的赋值
        $(boxId+" ul li").on("tap click", function(){
            selectCite.html($(this).text());
            selectInput.val($(this).data("inputValue")); // data()方法要求jQuery版本在1.4.3以上
            $(this).parent().hide();
        });
        // 点击任意处弹窗关闭
        $("body").on("tap click", function(e) {    
            if (e.target.id != selectCite.eq(0).attr("id")) { // 考虑到页面中可能会存在多个这样的下拉框,因此在html结构中需要对每个cite设置id,以辨识是哪个下拉框
                if($(boxId+" ul").css("display") == "block"){
                    $(boxId+" ul").hide();
                }
            }
        });
        // 默认自动获取第一个值
        if(typeof(bool) === "boolean" && bool){
            selectCite.html($(boxId+" ul li").eq(0).text());
            selectInput.val($(boxId+" ul li").eq(0).data("inputValue"));
        }
    };
调用方式

$.selectDiv(boxId, inputId, [bool]);
该方法可以接收三个参数:
boxId: 用于模拟select的下拉框盒子的id
inputId: 用于接收下拉选项的值的input元素的id
bool: 是否给下拉框设置默认值,是则设置为true,否可以不传该参数

$.selectDiv("#courseBox","#course",true); // 默认设置下拉框的值为第一个下拉项的值
$.selectDiv("#courseBox","#course");

其实,功能很简单,只是为了记录下来方便以后直接使用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,076评论 25 708
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,200评论 4 61
  • 其实之前我自己偶尔会记账,然后那会就是很老土地用笔和纸一笔笔流水账记起来。⼂⼃⼀⼁⼃断续续记了好长时间呢,唯一的收...
    依叮阅读 448评论 0 0
  • 朋友圈微商刷屏卖货与晒娃刷屏,是可忍孰不可忍?! 是不是说出了大多数人的心声,有木有?! 我曾经对此也是嗤之以鼻,...
    爆款奶爸阅读 2,142评论 0 3
  • 2014.08.05很荣幸的来到A公司(一个较大的电商公司),当时的我充满了期待,给自己的规划便是在这里一边工作一...
    Zou先生阅读 288评论 1 0