项目中遇到一个怪现象,公司大牛也没有注意过此问题,而且他们也很少做前端,所以没人解释得清原理。
SSH2框架下开发的项目,jsp页面中使用jQuery遇到的问题。
开发环境:
服务器tomcat,操作系统linux,jQuery版本1.8.0,IE版本9.0。
现象描述:
$(document).ready(function(){javascript逻辑代码});
jsp页面“初次”加载之后,在以上的“javascript逻辑代码”部分获取表单中的value(例:$("#id").val())得到undefined,绑定click事件(例:$("#id").click(function(){}))也得不到执行。
之所以上面用到“初次”两个字,是因为出现上述现象之后F5刷新页面,以上问题就都不见了。
我的页面是用来展示数据的,有个下一页按钮。“初次”加载页面之后,下一页按钮无功能,因为它是通过在$(document).ready(function(){})之中绑定click事件实现的。而刷新页面之后,下一页就有功能了。
发现此问题之后放弃了在$(document).ready(function(){})之中绑定事件,而是在html标签上通过onclick事件绑定函数,然后在<script></script>中定义函数来实现。在<script></script>中使用jQuery的各种功能都正常。 几点说明:
①以上异常只在IE下出现,火狐、谷歌浏览器下一点问题都没有。
②我在本地的window机器上开发完项目发布到linux系统下,在本机上也没问题,发布之后就有问题。
③无论在本机还是linux系统下,火狐、谷歌打开网页都比IE快得多。火狐、谷歌下从头到尾都是正常的。IE下一开始加载不上页面,后来去掉了$(document).ready(function(){})之后,总算功能都能实现了,但是速度上还是有很明显的差距。 各位看官尽情吐槽吧!jquerywebjsp
SSH2框架下开发的项目,jsp页面中使用jQuery遇到的问题。
开发环境:
服务器tomcat,操作系统linux,jQuery版本1.8.0,IE版本9.0。
现象描述:
$(document).ready(function(){javascript逻辑代码});
jsp页面“初次”加载之后,在以上的“javascript逻辑代码”部分获取表单中的value(例:$("#id").val())得到undefined,绑定click事件(例:$("#id").click(function(){}))也得不到执行。
之所以上面用到“初次”两个字,是因为出现上述现象之后F5刷新页面,以上问题就都不见了。
我的页面是用来展示数据的,有个下一页按钮。“初次”加载页面之后,下一页按钮无功能,因为它是通过在$(document).ready(function(){})之中绑定click事件实现的。而刷新页面之后,下一页就有功能了。
发现此问题之后放弃了在$(document).ready(function(){})之中绑定事件,而是在html标签上通过onclick事件绑定函数,然后在<script></script>中定义函数来实现。在<script></script>中使用jQuery的各种功能都正常。 几点说明:
①以上异常只在IE下出现,火狐、谷歌浏览器下一点问题都没有。
②我在本地的window机器上开发完项目发布到linux系统下,在本机上也没问题,发布之后就有问题。
③无论在本机还是linux系统下,火狐、谷歌打开网页都比IE快得多。火狐、谷歌下从头到尾都是正常的。IE下一开始加载不上页面,后来去掉了$(document).ready(function(){})之后,总算功能都能实现了,但是速度上还是有很明显的差距。 各位看官尽情吐槽吧!jquerywebjsp
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">或<!DOCTYPE html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
这是我页面上的
老孟说的是有道理的
实验证明没什么效果啊。<script></script>中的代码是按照文档顺序加载的,而$(document).ready(function(){})中的代码是在文档全部加载完成之后执行的,所以代码放在哪个位置应该没什么关系。
我怀疑ie在解析js(或者说jQuery)的时候可能在某些情况下存在bug。我做了另一个有趣的验证,我的$(document).ready(function(){})中大概有不到100行代码,如上所说jsp加载的时候解析这部分代码会非常之慢,甚至卡住不往下执行。我在代码的开始加上alert(123),并且在代码中每隔二三十行加上一个alert(123),这样jQuery代码居然能够流畅的执行下来。可见alert在某种程度上起到了引导js文件解析的作用。感觉很神奇。