日期:2014-05-16  浏览次数:20357 次

分享下使用jquery遇到的怪现象
    项目中遇到一个怪现象,公司大牛也没有注意过此问题,而且他们也很少做前端,所以没人解释得清原理。
    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(){})之后,总算功能都能实现了,但是速度上还是有很明显的差距。

    各位看官尽情吐槽吧!
jquery web jsp

------解决方案--------------------
把这些代码放到页面的最后
------解决方案--------------------
ie解析js的效率确实慢,感觉是不是你的js逻辑太复杂了,ie像蜗牛一般在你后面跟不上你的脚步。。。。
------解决方案--------------------
查看你的dtd是否正常,有这一堆:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">



<!DOCTYPE html>
------解决方案--------------------
引用:
Quote: 引用:

把这些代码放到页面的最后

明天到公司试试,不过感觉可能性不大!

老孟说的是有道理的
------解决方案--------------------
看上去挺奇怪,这个问题不应该猜测,而应该进行调试。

你检查一下 ready 的时候,DOM 对象是否已经存在了,用 ie9 的开发人员工具(断点设在【javascript逻辑代码】的第一行),监视变量 document.getElementById("id")