今天在二开项目的时候,突然发现程序开发商的一个bug,不复现问题都不会发现。

首先,是一个电子商城项目,编辑商品时,多个sku可以设置默认展示。
19481.jpg

正常操作随便设置一个为默认的sku,没有出现问题。奇怪的是当我二开这个sku其他属性的时候,保存后发现默认展示的状态没了。
2.jpg

测试后得知,只要默认展示这一列没发生改变,保存就会这样。期间一度以为是二开影响了。

查看源代码,从view、js、modem、controller一级一级进入,定位到了js那边的问题。
代码如下1482-1551行。
388.jpg

23070.jpg

分析代码

  • 遍历所有叫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都因为这个关闭了我的广告位功能。

Last modification:November 4, 2023
如果解决了你的困扰, 赏杯咖啡吧!
正文字体: 苍耳字库(屏幕显示字体)·苍耳今楷