今天在二开项目的时候,突然发现程序开发商的一个bug,不复现问题都不会发现。
首先,是一个电子商城项目,编辑商品时,多个sku可以设置默认展示。
正常操作随便设置一个为默认的sku,没有出现问题。奇怪的是当我二开这个sku其他属性的时候,保存后发现默认展示的状态没了。
测试后得知,只要默认展示这一列没发生改变,保存就会这样。期间一度以为是二开影响了。
查看源代码,从view、js、modem、controller一级一级进入,定位到了js那边的问题。
代码如下1482-1551行。
分析代码
- 遍历所有叫
is_default
的输入框 - 把每一个输入框的序号
data-index
赋值给index - 重置存储sku合集的数组里的每一行sku的
is_default
为0 - 监控每一个有序号的输入框/开关的状态
- 监控开关的
data.elem.checked
点击事件 - 设置打开的开关的
is_default
为1 - 再次遍历
- 将不是第一个点击的开关关闭
- 并设置is_default为0
问题就出现在data.elem.checked
是监控点击事件,正常操作会存在并不是每一个修改都会改动这个默认展示属性的。当本次没改变开关时就会出现没有点击的情况,整个data.elem.checked都无效。而一开始确又重置了所有sku的is_default
,导致提交后成了全关闭状态。
说错了欢迎指正,半桶水水平,程序是哪家就不说了,做个记录,好久没写了,ggad都因为这个关闭了我的广告位功能。