故事背景
清早上班,愉快地敲代码ing,突然 BOSS 来了。
BOSS 说:小陈,手上活有多少?现在有个紧急的功能急需上线,还能做啊?
ME 答:嫩嫩嫩,绝对嫩!
BOSS 说:好,这个功能是这样的,吧啦吧啦…
BOSS 继续:你看工作量有多少?10 天够不够?
ME 答:够够够,绝对够!
BOSS 说:好,那么一周做好,一周测试上线。
ME 答:嗯…
于是开始吭哧吭哧敲代码,功能是在企业微信基础上开发的,调试需要使用微信开发者工具中的公众号网页。
周五噼里啪啦测完收工,发布到测试环境,使用企业微信 PC 端测试,非常 nice,没有问题。
使用企业微信移动端测试,下拉框点击不开?!!点击开之后无法选中选项?!!
解决问题历程
俗话说得好,解决问题有两种方法:
- 解决问题
- 解决提出问题的人
于是…
解决提出问题的人
干掉使用的 Bootstrap-Select 插件,换上 Chosen,微信开发者工具调试依然没有问题,发布到测试环境,企业微信 PC 端调试,没有问题,移动端调试,还是不行?!!继续…
干掉 Chosen…
换上 Select 2…
微信开发者工具调试…
发布到测试环境…
企业微信 PC 端调试…
移动端调试…
… 周而复始 …
显然是不可能的,事不过三,都第三个插件了,还是不行,那肯定需要修改插件。
解决问题
既然提出问题的人解决不掉,只好解决问题了。
选中 Select 2 下拉框,在控制台 Elements 中的 Event Listeners 查看 click 事件,下拉框元素一层一层往下找,竟然没有发现 select2-min.js 绑定的 click 事件!!!
这 TMD 什么情况???
一气之下点开所有事件,看 select2-min.js 到底绑定了哪些事件。一通好找,最后发现选择框绑定的是 mousedown 事件。
这上面明明 select2-min.js 绑定了很多事件,为什么确定是 mousedown 呢?
首先 blur 事件(截图中没有)明显是鼠标移上去更换样式的,其次 focus 事件一般是主动调用 focus 方法之后触发的,keydown 事件是按键触发的…
还剩下 mousedown 事件,那么如何确定呢???
简单!只需要点击对应事件后面的 Remove 按钮,去掉事件,然后再点击选择框看看还会不会出现下拉就好了。
去掉绑定的 mousedown 事件之后,果然点击选择框,已经无法出现下拉了,灰常滴 nice。
把 select2-min.js 里面相应的 mousedown 事件改成 click 事件,再测试一下,果然没问题!
发布到测试环境,手机端现在也可以点击选择框出现下拉效果了,但是发现还是无法选中选项,那这个肯定是类似的问题,继续找,最终发现是 mouseup 事件。
把 select2-min.js 里面相应的 mouseup 事件改成 click 事件,继续,同样没问题!!!
周六上午花了 1 个半小时解决了,真开心~~~
总结
大佬们编写插件的时候,追求极致的体验,使用了细粒度方式解决问题,使用的时候可能出现一些问题,那么就需要攻城狮们自己解决问题,那么解决问题的具体步骤:
- 了解问题
- 分析问题
- 解决问题
- 解决不了的问题,以另一种方式尝试解决
- 还是不行则实施人道毁灭