我有来自 Garmin 的prototype.js,它与我的 jquery.frm.js 冲突,如下面的代码片段中所写。
<script src="/public/js/jquery-ui-1.8.16.custom.min.js"></script>
<script type="text/javascript" src="/public/js/jquery.frm.js"></script>
<script type="text/javascript" src="http://developer.garmin.com/web/communicator-api/prototype/prototype.js"></script>
它会抛出一个错误'Uncaught TypeError: undefined is not a function - jquery.frm.js 这是一小段 jquery.frm.js 代码(因为它太长了!)
var FRAMEWORK_PREFIX = "erpFrm";
(function( $ ){
$.frm = {
priorityAccepted : new Array(0,1,2,3,4,5,6,7,8,9),
initFunctions : new Array(),
_isLoading : false,
/*
* Pagination Variables
*/
currentPage : 0,
itemsPerPage: 100,
paginationOffset: 3,
/*
* Use to define fast ffward
*/
pace: 6,
options: {},
show: true,
/**
* Init function to run page is loaded
* @returns {undefined}
*/
init : function() {
for(var i=0; i < this.initFunctions.length; i++) {
this.initFunctions[i].callback();
}
return this;
} ....
})( jQuery );
$(document).ready(function() {
try {
$.frm.init();
} catch (e) {
console.log(e.message);
$.frm.showPopup(e.message);
}
});
实际上 document.ready 没有执行!怎么会这样?
基本上我尝试了 2 个解决方案——它们都应该在 jquery.frm.js 中加载脚本和代码,这就是我在函数内部或在 noConflict 之后调用脚本的原因
第一个解决方案
<script>
(function($) {
$.getScript('/public/js/jquery.frm.js').done(function(script, textStatus) {
console.log(textStatus);
}).fail(function(jqxhr, settings, exception) {
console.log(exception);
});
})(jQuery);
</script>
此代码仍会返回相同的错误 - undefined is not a function
第二种解决方案
<script>
jQuery.noConflict();
jQuery(document).ready(function($){
$.getScript('/public/js/jquery.frm.js').done(function(script, textStatus) {
console.log(textStatus);
}).fail(function(jqxhr, settings, exception) {
console.log(exception);
});
});
</script>
仍然存在相同的错误。
请给我一些关于如何解决问题的见解。