Ricky_Cslg
Ricky_Cslg
  • 发布:2017-09-01 11:19
  • 更新:2017-09-01 18:47
  • 阅读:2015

mui 无法获取js添加的div的高度

分类:MUI
mui

利用pullrefresh_with_tab.html 来做的页面

首先通过Ajax获取到数据,然后js创建动态的div,然后左右可以滑动,却无法向下滑动,报错是:

Uncaught TypeError: Cannot read property '0' of undefined mui.js:3787

网上找了方法,在#3787#那边加了个判断, 报错是不报错了,但还是不能上下滑动,就很尴尬了。

ajax获取数据和动态添加div的部分

报错部分

怎么解决呢?

2017-09-01 11:19 负责人:无 分享
已邀请:
n***@gmail.com

n***@gmail.com

在获取div高度时,先判断下当前div是否已经存在。而且官方demo也是有刷新的,刷新之后就能上下滑动和左右滑动,请根据示例复查一下

  • Ricky_Cslg (作者)

    通过js来获取动态添加的div的高度能获取得到, 然后左右滑动也有内容,就是不能上下滑动。

    然后到mui.js 里面this.pages.length 这个就好像是<=0的。 所以报错?

    2017-09-01 14:09

  • n***@gmail.com

    发demo附件吧,你这样说不是很明白

    2017-09-01 14:37

Ricky_Cslg

Ricky_Cslg (作者) - 刚入门的程序员~~

贴一下源代码:

<!DOCTYPE html>  
<html>  
<head>  
    <meta charset="utf-8">  
    <title>商品分类</title>  
    <meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">  
    <meta name="apple-mobile-web-app-capable" content="yes">  
    <meta name="apple-mobile-web-app-status-bar-style" content="black">  
    <link rel="stylesheet" href="__PUBLIC__/css/mui.min.css">  
    <link rel="stylesheet" href="__PUBLIC__/css/home.css">  
    <link rel="stylesheet" type="text/css" href="__PUBLIC__/css/icons-extra.css" />  
    <link rel="stylesheet" type="text/css" href="__PUBLIC__/css/app.css" />  
    <style>  
        html,  
        body {  
            background-color: #efeff4;  

        }  
        .mui-control-item:focus {color: #2a6496;text-decoration: underline;}  

        .mui-bar~.mui-content .mui-fullscreen {  
            top: 44px;  
            height: auto;  
        }  

        .mui-pull-top-tips {  
            position: absolute;  
            top: -20px;  
            left: 50%;  
            margin-left: -25px;  
            width: 40px;  
            height: 40px;  
            border-radius: 100%;  
            z-index: 1;  
        }  

        .mui-bar~.mui-pull-top-tips {  
            top: 24px;  
        }  

        .mui-pull-top-wrapper {  
            width: 42px;  
            height: 42px;  
            display: block;  
            text-align: center;  
            background-color: #efeff4;  
            border: 1px solid #ddd;  
            border-radius: 25px;  
            background-clip: padding-box;  
            box-shadow: 0 4px 10px #bbb;  
            overflow: hidden;  
        }  

            .mui-pull-top-tips.mui-transitioning {  
                -webkit-transition-duration: 200ms;  
                transition-duration: 200ms;  
            }  

            .mui-pull-top-tips .mui-pull-loading {  
                /*-webkit-backface-visibility: hidden;  
                -webkit-transition-duration: 400ms;  
                transition-duration: 400ms;*/  
                margin: 0;  
            }  

            .mui-pull-top-wrapper .mui-icon,  
            .mui-pull-top-wrapper .mui-spinner {  
                margin-top: 7px;  
            }  

            .mui-pull-top-wrapper .mui-icon.mui-reverse {  
                /*-webkit-transform: rotate(180deg) translateZ(0);*/  
            }  

            .mui-pull-bottom-tips {  
                text-align: center;  
                background-color: #efeff4;  
                font-size: 15px;  
                line-height: 40px;  
                color: #777;  
            }  

            .mui-pull-top-canvas {  
                overflow: hidden;  
                background-color: #fafafa;  
                border-radius: 40px;  
                box-shadow: 0 4px 10px #bbb;  
                width: 40px;  
                height: 40px;  
                margin: 0 auto;  
            }  

            .mui-pull-top-canvas canvas {  
                width: 40px;  
            }  

            .mui-slider-indicator.mui-segmented-control {  
                background-color: #efeff4;  
            }  
        </style>  
    </head>  

<body>  
<header class="mui-bar mui-bar-nav aui-header b-line">  
    <a class=" mui-icon mui-icon-search mui-pull-left" href="search.html"></a>  
    <h1 class="mui-title">海淘购</h1>  
    <a class=" mui-icon mui-icon-chatbubble mui-pull-right" href="dope.html"></a>  
</header>  
    <div class="mui-content">  
        <div id="slider" class="mui-slider mui-fullscreen mui-slider-loop">  
            <div id="sliderSegmentedControl" class="mui-scroll-wrapper mui-slider-indicator mui-segmented-control mui-segmented-control-inverted">  
                <div id="category" class="mui-scroll">  

                </div>  
                <div style="margin-top: 40px;width: 100%;height: 40px;background-color: #FFF;margin-bottom: 0px;">  
                    <select style="float: left; width: 30%;margin-bottom: 0px;height: 40px;">  
                        <option value="volvo">综合排序</option>  
                        <option value="saab">信用</option>  
                        <option value="opel">价格由高到低</option>  
                        <option value="audi">价格由低到高</option>  
                    </select>  
                    <span style="float: left;width: 40%;line-height: 40px;height: 40px;">销量优先</span>  
                    <span class="mui-icon-extra mui-icon-extra-class" style="line-height: 40px;"></span>  
                </div>  
            </div>  
            <div class="mui-slider-group" style="margin-top: 50px;" id="itembox">  

                <div id="item1mobile" class="mui-slider-item mui-control-content mui-active">  
                    <div id="scroll1" class="mui-scroll-wrapper">  
                        <div class="mui-scroll">  
                            <ul class="mui-table-view mui-grid-view" id="commodity">  

                            </ul>  
                        </div>  
                    </div>  
                </div>  

        </div>  
    </div>  
</div>  
<include file="Public/footer" />  
<script src="__PUBLIC__/js/jquery-2.1.4.min.js" ></script>  
<script src="__PUBLIC__/js/mui.js"></script>  
<script src="__PUBLIC__/js/mui.pullToRefresh.js"></script>  
<script src="__PUBLIC__/js/mui.pullToRefresh.material.js"></script>  
<script>  
    $(function (){  
        var params = {};  
        var url = 'http://32.40.134.105/gouwu/index.php/Home/Cate';  
        $.post(url, params, function(d){  
            $("#category").empty();  
            $("#category").append('<a class="mui-control-item mui-active" href="#item1mobile">全部</a>');  
            var j=2;  
            $.each(d.items_cate,function(i,val){  
                var listid ="item"+j+"mobile";   
                var html = '<a class="mui-control-item" href="#'+listid+'">' + val.name + '</a>';  
                $("#category").append(html);  
                j++;  
            });  
            $.each(d.list, function(i,val) {  
                var html = '<li class="mui-table-view-cell mui-media mui-col-xs-6"><a href="'+val.item_url+'"><img class="mui-media-object" src="'+val.pic_url+'"><div class="mui-media-body">'+val.title+'</div><div class="goods_info"> <span class="price_info">¥'+val.coupon_price+'</span> <span class="fav_num" style="float: right;">淘宝</span></div></a></li>';  
                $("#commodity").append(html);  
            });  
            var k = 2;  
            $.each(d.items_cate,function(i,val){  
                var html = '<div id="item'+k+'mobile" class="mui-slider-item mui-control-content mui-active"><div id="scroll1" class="mui-scroll-wrapper" data-scroll = "3"><div class="mui-scroll"><ul class="mui-table-view mui-grid-view" id="'+k+'commodity"></ul></div></div></div>'  
                $("#itembox").append(html);  
                $.each(d.list, function(j,vbl) {  
                    if(val.id == vbl.cate_id){  
                        var html = '<li class="mui-table-view-cell mui-media mui-col-xs-6"><a href="'+vbl.item_url+'"><img class="mui-media-object" src="'+vbl.pic_url+'"><div class="mui-media-body">'+vbl.title+'</div><div class="goods_info"> <span class="price_info">¥'+vbl.coupon_price+'</span> <span class="fav_num" style="float: right;">淘宝</span></div></a></li>';  
                        var copyid = k+"commodity";  
                        $("#"+ copyid+ "").append(html);  

                    }  
                });  
                k++;  
            });  
        }, 'json');   

    mui.init();  
    (function($) {  
        //阻尼系数  
        var deceleration = mui.os.ios?0.003:0.0009;  
        $('.mui-scroll-wrapper').scroll({  
            bounce: false,  
            indicators: true, //是否显示滚动条  
            deceleration:deceleration  
        });  
        $.ready(function() {  
            //循环初始化所有下拉刷新,上拉加载。  
            $.each(document.querySelectorAll('.mui-slider-group .mui-scroll'), function(index, pullRefreshEl) {  
                $(pullRefreshEl).pullToRefresh({  
                    down: {  
                        callback: function() {  
                            var self = this;  
                            setTimeout(function() {  
                                var ul = self.element.querySelector('.mui-table-view');  
                                ul.insertBefore(createFragment(ul, index, 10, true), ul.firstChild);  
                                self.endPullDownToRefresh();  
                            }, 1000);  
                        }  
                    },  
                    up: {  
                        callback: function() {  
                            var self = this;  
                            setTimeout(function() {  
                                var ul = self.element.querySelector('.mui-table-view');  
                                ul.appendChild(createFragment(ul, index, 5));  
                                self.endPullUpToRefresh();  
                            }, 1000);  
                        }  
                    }  
                });  
            });  
            var createFragment = function(ul, index, count, reverse) {  
                var length = ul.querySelectorAll('li').length;  
                var fragment = document.createDocumentFragment();  
                var li;  
                for (var i = 0; i < count; i++) {  
                    li = document.createElement('li');  
                    li.className = 'mui-table-view-cell';  
                    li.innerHTML = '第' + (index + 1) + '个选项卡子项-' + (length + (reverse ? (count - i) : (i + 1)));  
                    fragment.appendChild(li);  
                }  
                return fragment;  
            };  
        });  
    })(mui);  
</script>  
</body>  

</html>
Ricky_Cslg

Ricky_Cslg (作者) - 刚入门的程序员~~

demo

n***@gmail.com

n***@gmail.com

你应该把你之后的逻辑放在执行异步ajax操作完成之后,你放在外面mui初始化时只会找当前已存在的'.mui-scroll-wrapper' 容器去初始化。以后注意对动态改变dom的操作要放在请求成功内。

  • Ricky_Cslg (作者)

    额,你这么说我好像有点明白是什么意思了。但我不知道怎么在ajax完成之后初始化。 这个没理解。

    2017-09-01 19:03

  • Ricky_Cslg (作者)

    昨晚上弄好了,谢谢你。

    2017-09-02 07:33

该问题目前已经被锁定, 无法添加新回复