当前位置:首页 > 前端 > 正文内容

重置请限制你的范围

淙嶙7年前 (2018-09-14)前端919

出现问题

昨天就一直有人反馈录入功能不正常,可一直找不到问题,因为问题不能重现。具体现象是外地分部使用录入功能,录入的数据丢失了一个字段,但它在前台页面是一组单选按钮,是有默认值,数据库也是有默认值的,但现在录入的数据却显示一个空值,难道闹鬼了。


第一天

当时以为是一次意外事件,由于有其他事,所以只做了应急处理,把数据从数据库更正,然后就忙其他的去了。


第二天

今天早起又有人反馈,问题复现了。但这边还是找不到问题。一切正常,领导着急了。测试环境就是正常的,预发布也是正常的。虽然这样,也不能再把问题归为偶然啊,然后开始了撸代码,切到线上分支再撸代码。问题依旧没进展。


对策

有同事给出主意,多加日志,等上线在发现问题,再找。可这样只是寻找问题的方式,不能很快找到问题。


捋逻辑

接下来,我开始捋代码逻辑,正常运行没问题,后台也没问题,只是缺少验证,不是主要问题,那么只有一个解释:前台传值有问题。 那么假设前台是有问题,后台验证缺失,那么一切都顺了。关键前台页面的值是怎么没的?


发现问题

前台值丢了,有几种可能,1.代码把值弄丢了 2.浏览器问题 3.人为的。 首先排除3,没有人会弄这种恶作剧,接下来排除2,因为跟当事人联系,他用的浏览器在我们的兼容范围内。那么只有1了。这也是一直不原意承认的问题,因为觉得代码很明了啊,测试也没问题。但事情到了这一步了,只有先承认代码是有问题的或者假设有问题的,然后考虑为什么信息丢了呢,a 获取值有问题或者特殊情况下获取有问题 b 被其他代码改了。排除a 因为测试通过了,而且撸了好几遍代码,没发现可能出现的问题,先排除。那么就只有被其他代码改了。有什么地方会改呢,范围很大,先搜索吧。查找可以修改input对象的地方,我是直接搜索了val(“”)和val(‘), 这个是最容易设值为空的。终于,发现有个reset方法里面,做了个全局的置空操作:

 $("input").val("");

这个方法是重置按钮触发事件,验证下,点击重置,果然再次录入,值是被重置掉了,获取值就变成””。


解决问题

将input的作用域限制在当前表单就ok了。

 $("#formId input").val("");

总结

  1. 页面批量操作,一定要注意作用域。
  2. 查找问题,一定要做合理的怀疑,不要先入为主的认为自己代码就没有问题。

相关文章

electron-vue ReferenceError process is not defined

electron-vue ReferenceError process is not defined

问题:在使用electron-vue时候,运行npn run dev,会出现下面的错误 解决方法: 1、找到根目录下的.electron-vue目录 2、找到该目录下的webpack.rende...

图片下载跨域问题

图片下载跨域问题

开发的二维码图片下载功能,报了如下的错误,Tainted canvases may not be exported。 “受污染的画布可能会不能输出“ 下面是来着stack overflow的解决方...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。