我有来自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不是函数--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没有执行!怎么会这样?
基本上我尝试了两个解决方案 - 它们都应该在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不是函数
第二个解决方案
<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>
仍然存在同样的错误。
请告诉我一些如何解决问题的见解。
答案 0 :(得分:1)
您可以创建jQuery的别名并在脚本中使用。下面的示例代码来自jquery official website。希望这可以解决你的问题。
var j = jQuery.noConflict();
// Do something with jQuery
j( "div p" ).hide();
// Do something with another library's $()
$( "content" ).style.display = "none";
答案 1 :(得分:0)
在脚本代码的顶部,使用jQuery.noConflict()
释放$
以供其他脚本使用,在本例中为prototype.js代码。有关详细信息,请参阅jQuery noConflict文档:http://api.jquery.com/jquery.noconflict/。
(开始个人意见)我不建议简单地将jQuery分配给另一个短别名。每个人都想使用的这些JavaScript别名就像真正简短的变量名。大多数开发人员建议在大多数情况下避免使用变量名称,如'x'和'y',特别是如果变量具有非常大的范围。对jQuery使用'$'或'j'会缩短你的源代码,但这真的很重要。在生产中使用它之前,只需通过最小化器运行代码。 (最终个人意见)