Garmin prototype.js与本地jquery文件冲突

Garmin prototype.js conflicts with local jquery file

本文关键字:jquery 文件 冲突 prototype js Garmin      更新时间:2023-09-26

我有prototype.js从Garmin与我的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代码(因为它太长了!)

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);
    }
});

文档。准备不执行!这怎么可能呢?

基本上我尝试了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不是一个函数

第二个解决方案

<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>

仍然存在相同的错误。

请告诉我如何解决这个问题。

您可以创建jQuery的别名并在脚本中使用。下面的示例代码来自jquery官方网站。希望能解决你的问题。

var j = jQuery.noConflict();
// Do something with jQuery
j( "div p" ).hide();
// Do something with another library's $()
$( "content" ).style.display = "none";

在脚本代码的顶部,使用jQuery.noConflict()释放$以供其他脚本使用,在本例中是prototype.js代码。详见jQuery noConflict文档:http://api.jquery.com/jquery.noconflict/.

(开始个人意见)我不建议简单地为jQuery分配另一个短别名。每个人都想使用的JavaScript别名就像非常短的、糟糕的变量名。大多数开发人员建议在大多数情况下避免使用像"x"answers"y"这样的变量名,特别是当变量的作用域非常大时。在jQuery中使用'$'或'j'可以使源代码更短,但这真的那么重要吗?在生产环境中使用代码之前,只需通过最小化器运行代码即可。(结束个人意见)