【背景介绍】
MUI 版本 3.3。
在页面中使用了 Pop-Picker 组件(mui-picker)。
【问题阐述】
当点击选择器的“确定”按钮时,页面上抛出如下异常:
Uncaught TypeError: picker.getSelectedItem is not a function at src bs/mui/mui.poppicker.js:117
【解决方案】
几经排查,发现当页面内引入的 js 中包含了对 Array 原型链方法扩充时,会抛出这个异常。
定位到 mui.poppicker.js 第 112 行 getSelectedItems() 方法中,原先的:
for (var i in self.pickers) {
var picker = self.pickers[i];
items.push(picker.getSelectedItem() || {});
}
修改为:
for (var i = 0, len = self.pickers.length; i < len; i++) {
var picker = self.pickers[i];
items.push(picker.getSelectedItem() || {});
}
问题解决。
【后记】
查找资料时发现 http://ask.dcloud.net.cn/question/14800 这样一个问题,题主应该是遇到了和我同样的错误。
现在大多数开发者手头都会有几个工具库来扩充原型链方法, String.prototype.trim = function(); 这种经典的方法就不提了,为了应对低版本浏览器,对 Array.prototype.forEach = function(); 这类 ES5 常用方法也有必要做 polyfil,我本人遇到这个问题是因为扩充了 Array.prototype.remove = function();
Javascript 里 for in 遍历因为原型链的缘故本来就有潜在的坑,不如老老实实写 for 循环,必要时还需要使用 hasOwnProperty() 辅助判断,也希望大家引以为戒吧。
8 个评论
要回复文章请先登录或注册
风小舞
1***@qq.com
VanJay
Allen梅川酷子
leeistrue
大男人主义