在表单验证的时候出现了如下问题:



我找到了一个办法可以解决这个问题:
将isValid的声明调到上一层作用域中,问题得到解决(这个解决办法给我的启示是好像trigger执行完毕后,isValid又被声明了一次一样,但是我调试发现重头到尾只声明了一次)
另外,只有当第一次验证失败后(即表单的输入不合法),改正表单内的值使其合法后进行第二次验证才会出现这个问题,如果是第一次就输入合法,我调试发现修改isValid的值是始终有效的。
还有,不仅是isValid,我还测试了多个变量声明在enSureCallback函数内,然后在submitHandler中修改,都是和这个一样的情况。
我已经排除了异步的情况,重复声明或者调用的情况,实在是找不出哪里有问题了。因为复现有点麻烦,依赖也有2,3个,所以在线DEMO不好编写。因此大家有任何的猜测都可以提出来,说不定都是解决问题的突破口,先表示一下感谢^_^
----------------------------------------------------2016.10.4补充----------------------------------------------
这是第一次表单输入的值就合法时的函数调用情况
这是第一次表单输入不合法,然后再输入合法时的函数调用情况
可以看到完全没有区别(包括右边调用函数的具体行数),但是BUG就是发生了。。
下面是第一次表单输入的值就合法时的详细情况,当执行了isValid = true这条语句后,我们在call stack中跳转到ensureCallback函数,可以看到值修改是成功的。
下面是第一次表单输入不合法,然后再输入合法时的详细情况,当执行了isValid = true这条语句后,我们在call stack中跳转到ensureCallback函数,可以看到值修改是不成功的。
还有虽然之前已经说了排除了异步的干扰,看到评论里有朋友还是在说这个问题,这里再说明一下,这里真的真的没有异步,是先执行的handler,再return的,而且我调试的时候开了
,也没有发现任何异步函数在执行,所以真的可以排除异步的问题了。
现在我的重点思考在于1.为什么只有在第一次失败后才会出现这个BUG,第一次的验证对后面的验证到底产生了什么影响(我是真的想不出有什么影响。。)2.像我之前提到的,为什么将isValid的声明放到上一层作用域去声明就没有BUG了.
希望这次的补充能够帮助大家分析问题
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
把isValid变量,改为最外层的全局变量试试看。
将isValid的声明调到上一层作用域中,问题得到解决(这个解决办法给我的启示是好像trigger执行完毕后,isValid又被声明了一次一样,但是我调试发现重头到尾只声明了一次)
我觉得很有可能是被重复声明,可是我又调试不了。你的两个值出现的地方也不一样。
trigger('submit')做了什么?有可能是这步改变了变量。
在var isValid 那儿打个断点试试呢
bug嘛,慢慢调,我喜欢调bug,要是能一起调就好了,不过可以慢慢讨论,一步一步解决,我也想学习。
如果你调好了就OK了
楼主你这个应该是异步的问题吧,
return isValid;始终返回的是初始值false,因为事件回调函数submitHandler中修改isValid的值那都是之后的事了,和return isValid;无关了,因为return isValid;是在主线程执行的,事件回调函数submitHandler必须等主线程执行完才会被提取调用