javascript - 在我的小部件库中出现 'jQuery not defined' 错误

标签 javascript jquery plugins widget prototype

我在做什么

我正在创建一个可分发的 jQuery 小部件库,它在 HTML 页面上插入一个 anchor 。

问题

在(JS 的)'MyWidget.prototype.Render' 方法中,它给了我以下错误 - “jQuery is not defined” 但是,它在 ' MyWidget.prototype.ResolveJqueryAndLoadAdditionalJsAndCss 的方法。

HTML 片段

<html>
<head>
    <link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
    <a href="http://yahoo.com">Anchor - by user code</a>

    <!-- Widget Script: Starts -->
    <script type="text/javascript" src="widget.js" ></script>
    <Script type="text/javascript"> 
        var customWidget = new MyWidget();
        customWidget.Render({ anchorText:'Hola!!!' });
    </script>
    <!-- Widget Script: Ends -->
</body>
</html>

JS代码(widget.js)

    var MyWidget = function() {
    // Localize jQuery variable
    var jQuery;
    // Load jQuery if not present
    if (window.jQuery === undefined || window.jQuery.fn.jquery !== '1.4.2') {
        var script_tag = document.createElement('script');
        script_tag.setAttribute("type","text/javascript");
        script_tag.setAttribute("src", "http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js");
        if (script_tag.readyState) {
        script_tag.onreadystatechange = function () { // For old versions of IE
            if (this.readyState == 'complete' || this.readyState == 'loaded') {
                this.ResolveJqueryAndLoadAdditionalJsAndCss();
            }
        };
        } else {
            script_tag.onload = this.ResolveJqueryAndLoadAdditionalJsAndCss;
        }
        // Try to find the head, otherwise default to the documentElement
        (document.getElementsByTagName("head")[0] || document.documentElement).appendChild(script_tag);
    } else {
        // The jQuery version on the window is the one we want to use
        jQuery = window.jQuery;
        this.ResolveJqueryAndLoadAdditionalJsAndCss();
    }
    };

MyWidget.prototype.ResolveJqueryAndLoadAdditionalJsAndCss = function() {
        // Restore $ and window.jQuery to their previous values and store the
        // new jQuery in our local jQuery variable
        jQuery = window.jQuery.noConflict(true);
        jQuery(document).ready(function($) {
            $.when(
                $.getScript( "http://www.jacklmoore.com/colorbox/jquery.colorbox.js" ),
                $.Deferred(function( deferred ){
                    $( deferred.resolve );
                })
            ).done(function(){ });
            // Loading Custom CSS
            var css_link = $("<link>", { rel: "stylesheet", type: "text/css", href: "https://raw.github.com/premasagar/cleanslate/master/cleanslate.css" });
            css_link.appendTo('head');
            css_link = $("<link>", { rel: "stylesheet", type: "text/css", href: "http://www.jacklmoore.com/colorbox/example4/colorbox.css" });
            css_link.appendTo('head');
            css_link = $("<link>", { rel: "stylesheet", type: "text/css", href: "widget.css" });
            css_link.appendTo('head');
        });
    };

MyWidget.prototype.Render = function(data){
        jQuery(document).ready(function($) {
            $('<a href="http://wikipedia.com" class="cleanslate custom widgetExternalPage">' + data.anchorText + '</a>').appendTo('body');
            $(".widgetExternalPage").colorbox({iframe:true, width:"80%", height:"80%"});
        });
    };

最佳答案

嗯,您正在重新定义 jQuery。实际上,您是在重新声明任何变量,同时也在重新设置它的值。在这里,您将 jQuery 的值设置为 undefined。你不应该这样做。

如果你愿意,你可以这样做:

var jQuery = jQuery || undefined;

这可能会有所帮助,祝你好运!

关于javascript - 在我的小部件库中出现 'jQuery not defined' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20921837/

相关文章:

javascript - 如何根据链接点击动态填充部分内容?

javascript - vue.js 组件内联样式串联

javascript - 使用带有变换属性的缩放时定位 sibling

javascript - 指令需要在元素呈现后更新数据

javascript - 用于样式的移动设备类型检测?

javascript - 猫头鹰轮播2导航

vim - 是否有任何插件/方法可以在 Vim 中管理多个项目?

java - 默认构造函数的隐式 super 构造函数 AbstractNcssCountRule() 未定义。必须定义显式构造函数

php - 检查标题中是否包含 jQuery (Joomla)

javascript - JavaScript 字符串如何是一组 "elements"16 位无符号整数值?