项目中出现单选框的一系列奇葩错误

代码编程过程出现一系列奇葩问题,明明就是很简单的问题,可偏偏就是找不到问题所在。经过他人指点,终于找到了突破口。
问题点一:能够获取到单选框的选中值,可是不能回填单选框的选中值。
项目中出现单选框的一系列奇葩错误
问题点分析:本来只要我的单选框选中值和input标签的value值对应,数据的回填就不会出现什么问题,可是我对应了单选框选中值和input标签的value值还是回填不成功,然而因为我使用的是form表单直接提交数据,所以不单单只需要对应单选框选中值和input标签的value值。使用form表单提交还需要是控制器方法中的字段与input标签中的name一致。

解决方法:添加input标签的name,并且使input标签的name值和控制器方法中的字段保持一致。

问题点二:我想要返回单选框false状态下的值,可是回填数据是无法回填正确。它一直返回的是默认选中值,也就是input上带有checked类的值。
项目中出现单选框的一系列奇葩错误
问题点分析:在上图中红色圈中部分是自己原本写的源代码,未圈中的是在页面选中值自动添加的代码。检查发现当我改变选中值时,我自己原本写的源代码没有发生任何改变,改变的是在我选中时自动生成的代码,也就是改变的是浅紫色部分的代码值。这也就意味着我的改变值并没有得到获取。我使用的获取代码 var Sex = $(’#form表单ID input[name=“Sex”]’).val();//性别。然而这个代码只能获取到自己原本写的代码值,并不能获取到自添加的代码。这便是问题所在点,其实自添加代码是因为我使用的是layui插件的表单类,它就和我使用的bootstrap框架冲突。

解决方法:因为使用layui插件表单类会和使用框架冲突,所以不使用layui插件的表单类(在form表单上去除layui-form),使用最原生代码,它表单的回填数据就不会出现问题。
项目中出现单选框的一系列奇葩错误
问题点三:单选框的值会回填数据正确,修改方法中获取的数据也是正确的,可是页面返回的值不一致。明明选中的是false(否)页面获取到的却是 true(是),但是最后回填数据是可以修改状态成功的。
项目中出现单选框的一系列奇葩错误
问题点分析:原本我只要切换了单选框的选中值,页面就可以返回对应的数据,但是从上图红色圈中部分可以看出我选中的是flase(否),可返回给我的值是ToBuyCar=“是”。我觉得这里出现问题有可能会是页面获取值获取没获取成功。可重点来了,我做的修改操作它并没有错误,不仅返回了我选中值数据还能修改状态成功。
项目中出现单选框的一系列奇葩错误
综上分析,问题点就是不能视图层返回数据和控制层返回数据不一致。在控制器返回正确的数据,说明控制器方法获取没问题。同时又能够将状态修改完成,也就能够证明控制器方法是没有错误的,那问题就是处在视图层。问题既然出现在视图层,那就去视图层一一排查咯。首先它能有值说明点击事件是没问题了,var ToBuyCar = $(’#form表单ID [name=“ToBuyCar”]’) .val(); 代码书写也是没有问题,只是这句代码获取的是单选框的两个值,在使用单选框是它会返回一个默认值。
项目中出现单选框的一系列奇葩错误
综合总结:
1、 框架和框架最好不要混用了,避免框架冲突。
2、 使用form表单提交不仅仅是input标签中的value值需要和控制器方法中的字段对应,还有input标签中的name值也需要对应控制器方法字段。
3、 单选框的选中值获取要明确,单选框的选中值一般是由checked类决定,需指明带有checked的类。
4、 理解var ToBuyCar = $(’#form表单ID [name=“ToBuyCar”]’).val(); 和var ToBuyCar = $(’#form表单ID [name=“ToBuyCar”]:checked’).val(); 两者的区别所在。