Lot*_*har 6 javascript jquery jqgrid
我只在Firefox 4中出现以下错误(不在FF 3.6.16,Safari,Chrome,Opera或IE中):
jQuery("#list").jqGrid is not a function
loadComplete: function(){console.log('complete');}
myfile.js line 542
Run Code Online (Sandbox Code Playgroud)
loadComplete是jqgrid代码块的最后一行(第542行).所以它到达jqgrid的调用结束然后抛出此错误.
这是在过去一年一直运作良好的网站上.一旦我升级到Firefox 4,我遇到了这个问题.我确定在加载所有其他javascript之后我将这个调用加载到jqgrid(并且它在所有其他测试的浏览器和旧版本的Firefox中都能正常工作).
什么可能导致这样的事情?我本来以为可以简单地通过makeing确保调用的jqGrid是jQuery和在jqGrid的插件后进行加载,但是......这似乎已经是这样来解决(我甚至尝试上加载设置5秒的超时调用jqgrid的位,以便确保加载所有内容但仍然失败).无论如何,为什么只在FF4?
额外信息:
这是页面上的js加载顺序:
<script type="text/javascript" src="/js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="/js/jquery-ui-1.8.1.custom.min.js"></script>
<script type="text/javascript" src="/js/i18n/grid.locale-en.js"></script>
<script type="text/javascript" src="/js/jquery.jqGrid.js"></script>
<script type="text/javascript" src="/js/ajaxupload.js"></script>
Run Code Online (Sandbox Code Playgroud)
然后在页面末尾加载jqgrid调用的特定视图:
<script type="text/javascript" src="/js/viewspecific.js"></script>
Run Code Online (Sandbox Code Playgroud)
最后一个是由Zend Framework中的一个方法加载的,该方法可以预先加载,附加或偏移加载文件.在对此进行故障排除时,我明确使用了append以及偏移量来强制此脚本最后加载死机.我甚至尝试在视图脚本的底部包含原始JS,而不是作为单独的文件加载,但没有任何区别.
有关如何排除故障的任何想法?
Oleg提供的修复方法是修改各种包含文件的加载方式.在loader(jquery.jqGrid.js)中,您将看到特定于浏览器的代码,如:
if(jQuery.browser.safari ) {
jQuery.ajax({url:filename,dataType:'script', async:false, cache: true});
} else {
if (jQuery.browser.msie) {
document.write('<script type="text/javascript" src="'+filename+'"></script>');
} else {
IncludeJavaScript(filename);
}
}
Run Code Online (Sandbox Code Playgroud)
我用更通用的代替了它:
document.writeln("<script type='text/javascript' src='"+filename+"'></script>");
Run Code Online (Sandbox Code Playgroud)
现在一切都在所有浏览器中都很好.
您似乎使用了jqGrid的开发者版本.它包含jqGrid所包含的许多模块.该文件jquery.jqGrid.js也称为grid.loader.js仅按指定顺序动态包含模块.
问题是有许多动态的方法,包括JavaScript文件,所有这些都有优点和缺点.如果您只是在页面中包含<script>所有模块的声明,jquery.jqGrid.js或者您真正需要程序的所有模块都可以使用.
IE之前也存在同样的问题.我建议修复使用document.writeln了现在包括在的代码jquery.jqGrid.js在github上,但这样只会对IE中使用.似乎Firefox 4也应该使用相同的方式.如果您使用<script>与jquery.jqGrid.js内部<head>的HTML页面,比的唯一的缺点document.writeln,我知道的是XHTML页面的限制方法:你不应该包括<xml>在页面开始前头<!DOCTYPE ....
像我之前写的那样,最好,最简单,最安全的方法是直接包含你需要的所有模块.我个人只使用这种方式.
| 归档时间: |
|
| 查看次数: |
1374 次 |
| 最近记录: |