Prototype和jQuery与$ .when.apply冲突

时间:2014-12-15 13:17:00

标签: javascript jquery

我尝试过使用多种代码组合来使Prototype和jQuery工作,但是没有运气。

这是我目前所拥有的。

的index.html:

<script src="https://ajax.googleapis.com/ajax/libs/prototype/1.7.2.0/prototype.js"></script>
<script src="http://code.jquery.com/jquery.js"></script>
<script src="MAIN_JS_FILE.js"></script>`

main_js_file.js:

    jQuery(document).ready(function() {
        var jsq = [];
        jsq.push(AJAX_CALL_FOR_FETCHING_JS_FILE_1);
        jsq.push(AJAX_CALL_FOR_FETCHING_JS_FILE_2);
        jsq.push(AJAX_CALL_FOR_FETCHING_JS_FILE_3);

        var deferredjs = jQuery.when.apply(jQuery, jsq);
        deferredjs.done(function() {
            //Various variable initialization
            //Various function definition.
        }
    });

现在,当加载页面(页面正确加载)时,chrome控制台会显示错误消息:

  

未捕获的TypeError:undefined不是函数。

单击错误文件链接时,它指向prototype.js文件中的element.dispatchEvent(event);,第7066行。

感谢任何帮助。

感谢。

修改:我已将MAIN_JS_FILE.js文件更改为仅使用jQuery而非$ 现在,没有一个使用$的JavaScript代码,但仍会显示undefined错误。

如果我现在在jQuery.noConflict();函数之前使用.ready(),那么$.when.apply代码甚至都不会执行。

2 个答案:

答案 0 :(得分:1)

在评论中提及的@steven iseki,您可以使用jQuery.noConflict。您可以在他们的网站上阅读:

  

许多JavaScript库使用$作为函数或变量名,就像jQuery一样。在jQuery的情况下,$只是jQuery的别名,因此所有功能都可以在不使用$的情况下使用。

确实Prototype使用$符号也是如此。

另外,请记住在jQuery代码中使用jQuery代替$符号,例如:

jQuery(selector).on('click', function(){...});

答案 1 :(得分:0)

我不认为这里有jQuery Conflict错误。尝试从main.js更改您的代码。尝试使用其他方法在此完成任务。我分析了你的代码,但prototype.js有一种隐藏真实内容的方法。