我遇到了一个奇怪的javascript问题。
问题页面使用一些jQuery代码来收集数据,它会输入检查验证。如果验证为true,则会将其发布到服务器。我们的一些用户报告(10%或者可能少得多),他们无法在网站上提交。
我们与其中一位遇到问题的用户进行了交谈,之后更加困惑。
Tester的PC:XP,IE8,FireFox
他第一次使用IE并且JavaScript验证没有触发,他也无法将数据提交给服务器,因为默认情况下验证设置为false。 (如果验证为假,则应该显示错误消息)
之后,他与F.F.进行了测试。 (F.F.直接工作)。
再次回到IE,验证脚本开始工作,提交再次成功。
所以,毕竟测试人员不再有问题,也无法复制。
我想知道是否有任何软件或程序可能会阻止js文件正常下载? 因为该页面也托管在另一个网站的i-frame中,所以我认为某些防病毒软件可能会认为这是一个跨域威胁,并阻止了发布工作。
如果是这样,我怎样才能检查以确保在用户提交之前下载了所有必需的js文件?
我还应该研究什么,因为问题只发生在客户端,尚未进行服务器端验证。
@drachenstern:感谢您的编辑
答案 0 :(得分:1)
您可以禁用提交按钮,仅在jQuery完全加载并执行后启用它。
例如:
<input type="submit" disabled />
然后,在你的Javascript中,
$(function () { $('input:submit').attr('disabled', false); });
但是,请注意
答案 1 :(得分:0)
我建议您首先应该始终验证服务器上的所有内容。在客户端验证的唯一原因是在输入错误时更快地响应用户。
此外,为确保下载和处理每个文件,您始终可以在每个文件中放置一个全局变量,然后在文档中检查它们以查看是否已找到每个变量。这是一个粗糙的回来,但它会起作用。
你没有指定用户正在使用的IE版本,但是IE中没有立即加载文件的问题对我来说听起来是正常的行为,无论多么古怪。我遇到过很多次,唯一的解决方案是对我来说是ctrl-F5。我不知道还有什么要说的。如果我们总能让每个浏览器都响应相同,那就太棒了,但我们做不到,所以我们继续。另外,他们在做什么操作系统测试?你测试什么浏览器?
您在IE中看到了什么行为?如果您使用的是IE8或更高版本,您肯定会有调试工具,并且您可以始终使用FirebugLite在IE中调试您的页面而无需使用IE工具。然后你可以看到页面在IE中做了什么。也许它抛出了一个javascript解析错误? IE浏览器中的窗口镀铬上是否有任何图标可以提示?
但我认为,如果您正在尝试修复第二段,那么如果您依靠javascript来处理验证,则说错了。但我只是一个人。
答案 2 :(得分:0)
在客户端sde上加载javascript可能会有一些延迟。反病毒“Internet secutiry”产品(可能)做了很多检查。
互联网安全产品极有可能扫描一个电话,然后决定“好,这是安全的”,然后下载javascript文件。 可能是一个延迟。
如何避免这种情况?
不要将表单提交绑定到javascript。无论有没有javascript,总是让它发生。如果javascript准备就绪,用户将获得良好的体验(立即验证)。如果还没有准备好,用户仍然可以进行提交,进行验证并以“传统”方式抛出错误消息 - 刷新页面
让用户等到javascript加载完毕。您可以在页面的某个位置放置一个小的“加载”图标,告诉用户他必须等待。用户可以输入数据,但无法提交。在后台,继续检查是否加载了javascript(setTimeout
并检查特定变量)。加载后,您可以使用javascript验证
两者的组合:允许非JavaScript提交,直到您知道javascript已加载。完成后,使用javascript验证。