美文网首页
weui在对话框中使用picker

weui在对话框中使用picker

作者: ChasenGao | 来源:发表于2018-10-28 13:29 被阅读685次

最近在工作中接到这么一个需求。
1、使用jquery weui框架。
2、实现点击按钮出现weui对话框,并在对话框中嵌套weui的时间picker。

最初的实现的方法如下(代码已删):
1、直接弹出picker。
2、使用jq的append等方法追加元素。
3、通过css !important使weui自带的css属性无效,并调整picker所在位置。

结果:成功实现,但是代码太多,看上去很恶心,后续出现 多次渲染元素时,只点击第一个按钮有效,第二个无法正常弹出的bug。

后来的实现方法:
1、调用modal弹出对话框。
2、动态设置modal的css选择器
3、调用picker使其在自己设置的css选择器上内联显示。

这样做完确实很好用,但是只点击第一次正常显示,再点击就无法弹出picker,经多次试验后,发现唯一的css只能调用一次内联picker,而且无法使用内置的方法关闭picker。
于是我通过时间戳创建了动态css选择器,用户选择完时间后,再把选择的数据动态添加到现有的input中。
完整代码如下:

<!DOCTYPE html>
<html lang="zh">

    <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>Document</title>
        <link rel="stylesheet" href="https://cdn.bootcss.com/weui/1.1.3/style/weui.min.css">
        <link rel="stylesheet" href="https://cdn.bootcss.com/jquery-weui/1.2.1/css/jquery-weui.min.css">
        <script src="https://cdn.bootcss.com/jquery/1.11.0/jquery.min.js"></script>
        <script src="https://cdn.bootcss.com/jquery-weui/1.2.1/js/jquery-weui.min.js"></script>
        <script src="https://cdn.bootcss.com/jquery-weui/1.2.1/js/swiper.min.js"></script>
        <script src="https://cdn.bootcss.com/jquery-weui/1.2.1/js/city-picker.min.js"></script>
        <style type="text/css">
            * {
                touch-action: pan-y;
            }
        </style>
    </head>

    <body>
        <button class="ipt">签到</button>
        <input type="text" id="getvalue" readonly="readonly" />
        <br />
        <button class="ipt2">签退</button>
        <input type="text" id="getvalue2" readonly="readonly" />
    </body>
    <script type="text/javascript">
        //返回一个数组,提供给weui的picker让其在每次弹出默认都显示现在的时间。
        function initTime() {
            var arr = [];
            var d = new Date()
            var hh = d.getHours()
            var mm = d.getMinutes()
            if(mm >= 0 && mm <= 9){
                mm = '0' + mm;
            }
            var ss = d.getSeconds()
            if (ss >= 0 && ss <= 9) {
                ss = '0' + ss;
            }
            arr.push(hh.toString(),mm.toString(),ss.toString())
            return arr;
        };
        //返回一个数组,内容为0~num的string值。
        function getNum(num) {
            var arr = []
            for(i = 0; i < num; i++) {
                if(i >= 0 && i <= 9) {
                    i = '0' + i;
                }
                arr.push(i.toString())
            }
            return arr
        };

        //时间选择器
        function showPicker(id) {
            //用时间戳创建唯一标记
            var elstamp = new Date().getTime()
            //生成唯一input,该input存储picker获取到的值
            $('body').append('<input hidden="hidden" type="text" class="' + elstamp + '" />')
            //调用弹窗
            $.modal({
                title: "Hello",
                text: '<div id="' + elstamp + '"></div>',
                buttons: [
                    {
                        text: "确认",
                        className: "default",
                        onClick: function() {
                            $('#' + id).val('');
                            //获取唯一input的值到固定input中
                            $('#' + id).val($('.' + elstamp).val().replace(' ', ':').replace(' ', ':'))
                            $('.' + elstamp).remove()

                        }
                    },
                ]
            });
            //内联使用picker
            $('.' + elstamp).picker({
                cols: [{
                        textAlign: 'center',
                        values: getNum(24)
                    },
                    {
                        textAlign: 'center',
                        values: getNum(60)
                    },
                    {
                        textAlign: 'center',
                        values: getNum(60)
                    }
                ],
                container: '#' + elstamp,
                value: initTime()
            });
        }

        //点击事件
        $('.ipt').on('click', function() {
            showPicker('getvalue');
        })

        $('.ipt2').on('click', function() {
            showPicker('getvalue2');
        })
    </script>

</html>

因为我没找到更好的方法,而且接手项目时基带的jq组件库就是weui,所以我也就懒得自己写一个picker了,这样更快捷。
有条件的情况下,还是建议自己写一个。
最终效果如下:


GIF.gif

相关文章

网友评论

      本文标题:weui在对话框中使用picker

      本文链接:https://www.haomeiwen.com/subject/dbvptqtx.html