在没有document.ready()的情况下运行jQuery,并且崩溃即8

时间:2012-11-26 23:06:40

标签: jquery crash

这是发生了什么的非常简化的例子

jQuery(".resultAction").each(makeItso);

function makeItso() {
    //code executes (it was a conditional to test for a file extension and display apply a class)
    //the short version:
    jQuery(this).find("#indicator").addClass("is" + fileExtension.slice(1));

    //no file extension hide the icon div "indicator"
    if ((fileExtension.indexOf('.') == -1)) {
        jQuery(this).find("#indicator").addClass("not");
    }

}

现在,这种方法效果很好,它比.ready()工作得更快 - 我每页大约有100个结果。

但是有一个错误:在最后一个元素上它没有执行-so,我这样做是为了在页面加载后重新运行最后一个项目上的函数:

jQuery(document).ready(function(){
    jQuery(".resultAction:last").each(makeItso);
});

所以,长话短说这很好用,在Firefox,IE 7,8,9中 - 尽管HERE是有趣的部分:我使用Mac和VMware Fusion测试过,我觉得“我觉得”我很好,测试人员使用他们的PC和IE 8 --Epic失败。

我倾向于:虚拟机上的#1测试与真实交易不同。另外我的问题是为什么这个崩溃在IE 8中,否则在9和Fox中运行良好?我编码严重吗?

1 个答案:

答案 0 :(得分:1)

看起来每个id="indicator"内都有.resultAction的元素。每个ID在页面上应该是唯一的。某些浏览器可能不关心此限制。其他人可能。

id="indicator"更改为class="indicator",这可能会有所帮助。

至于你的另一个问题,即它没有在最后一行执行,只要确保脚本在HTML中的后期出现而不是它操作的元素,就不需要等待document.ready。 。即将<script>标记放在正文之前的最后一个标记处。如果你这样做并且它不起作用,我们肯定需要看到完整的HTML。