c***@sina.com
c***@sina.com
  • 发布:2016-08-04 20:03
  • 更新:2017-07-19 18:15
  • 阅读:1350

【报Bug】picker(选择器)二级和三级快速滑动快速点击确定易错位和出现undfined

分类:MUI

详细问题描述
[内容]picker(选择器)二级和三级快速滑动快速点击确定易错位和出现undfined

重现步骤
[步骤]
1.打开二级城市

  1. 快速滑动选项
  2. 快速选择确定
    [结果]出现undfined或错误
    [期望]

运行环境
[系统版本]ios9.3.3
[浏览器版本]
[IDE版本]
[mui版本]3.2.0

附件
[代码片段]
[安装包]

联系方式
[QQ]285496761
[电话]

2016-08-04 20:03 负责人:无 分享
已邀请:
without_bug

without_bug

这个问题没人回答么

lljjkk

lljjkk

发现同样的问题,我的做法是修改了一下mui.picker.all.js,肯定有更好的办法,但是我先这么用着吧。。

在picker构造函数中添加一个pickEnable = true(随便取的,是否允许选取)

self.bindEvent();  
self.pickEnable = true; //大概第41行

下面修改两个方法。

Picker.prototype.startInertiaScroll = function(event) {  
        /////////////  
        //----  
        if (distAngle == 0) {  
            self.endScroll();  
            self.pickEnable = true; //滚动结束添加一个标记  
            return;  
        }  
        self.scrollDistAngle(nowTime, startAngle, distAngle, duration);  
    };
Picker.prototype.scrollDistAngle = function(nowTime, startAngle, distAngle, duration) {  
        var self = this;  
        self.stopInertiaMove = false;  
        (function(nowTime, startAngle, distAngle, duration) {  
            var frameInterval = 13;  
            var stepCount = duration / frameInterval;  
            var stepIndex = 0;  
            (function inertiaMove() {  
                if (self.stopInertiaMove) return;  
                self.pickEnable = false; //如果pick还在移动,添加标记,禁止选取  
                var newAngle = self.quartEaseOut(stepIndex, startAngle, distAngle, stepCount);  
                self.setAngle(newAngle);  
                stepIndex++;  
                if (stepIndex > stepCount - 1 || newAngle < self.beginExceed || newAngle > self.endExceed) {  
                    self.endScroll();  
                    self.pickEnable = true;//如果pick滚动结束,添加标记,解除禁止  
                    return;  
                }  
                setTimeout(inertiaMove, frameInterval);  
            })();  
        })(nowTime, startAngle, distAngle, duration);  
    };

接下来就是对城市选择的那部分做一点处理。

self.ok.addEventListener('tap', function(event) {  

    var pickEnable = true;  
    for(var i=0;i<self.pickers.length;i++){  
        pickEnable = pickEnable && self.pickers[i].pickEnable ;//获取每个picker实例中的pickEnabel  
    }  
    if(!pickEnable ){return;}  

    if (self.callback) {  
        var rs = self.callback(self.getSelectedItems());  
        if (rs !== false) {  
            self.hide();  
        }  
    }  
}, false);

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