在一个拥有17个输入框input字段的表单页面,用bindinput和bindblur获取字段值,整个页面只有两处wx:if。这些input输入框类似这样:<input type="text" class="weui-input" name="x" placeholder="..." value="{{x}}" bindblur="{{这里的处理函数会同步data.x的值}}" />,莫非是因为bindblur里同步修改了data.x,同时渲染到value="{{x}}"上,导致了太多什么隐蔽的处理?
同样的页面在此之前稳定运行了一年多,只是最近两周,苹果用户频繁反馈出现闪退现象,从反馈的录频来看,闪退出现在从一个Input失去焦点,切换到另外一个input获得焦点时,整个微信毫无提示的闪退。我们想了各种方法尝试解决,但问题依旧,这导致我们的用户怨声载道!
————————
以上为原问题,经过艰苦卓绝的排查,我们发现问题出在type="text"上,这里如果是静态写死的"text"就没问题,如果是type="{{metas.x.type}}"这种动态键盘类型,即使实际上两个input都是text,在两者之间点击切换,一样会导致IOS微信闪退。
拆表单把,别偷懒... 出这个问题估计跟input监听机制有关系, 最快的解决办法就是把你这一个表单拆分成2-3个独立的组件,然后每次少监听点.
至于说提取成组件,是这样可以尽可能小的影响原有业务.