JavaScript 不会在加载时运行。如何在 HTML 中修复?

标签 javascript html

我已将 Javascript 用于选项卡,但它不适用于文档加载。当我将它放入 jsfiddle 中(Nowrapper-in)时,它工作正常,没有任何错误。 如何让它在负载下运行?

我不太擅长 JavaScript。

我的Javascript代码如下:

$(function() {
    $("#content-switch").organicTabs();
});


// organicTabs plugin below
// http://css-tricks.com/organic-tabs/
(function($) {

    $.organicTabs = function(el, options) {

        var base = this;
        base.$el = $(el);
        base.$nav = base.$el.find("#menunav");

        base.init = function() {

            base.options = $.extend({},$.organicTabs.defaultOptions, options);

            // Accessible hiding fix
            $(".hide").css({
                "position": "relative",
                "top": 0,
                "left": 0,
                "display": "none"
            }); 

            base.$nav.delegate("li > a", "click", function() {

                // Figure out current list via CSS class
                var curList = base.$el.find("a.current").attr("href").substring(1),

                // List moving to
                    $newList = $(this),

                // Figure out ID of new list
                    listID = $newList.attr("href").substring(1),

                // Set outer wrapper height to (static) height of current inner list
                    $allListWrap = base.$el.find(".list-wrap"),
                    curListHeight = $allListWrap.height();
                $allListWrap.height(curListHeight);

                if ((listID != curList) && ( base.$el.find(":animated").length == 0)) {

                    // Fade out current list
                    base.$el.find("#"+curList).fadeOut(base.options.speed, function() {

                        // Fade in new list on callback
                        base.$el.find("#"+listID).fadeIn(base.options.speed);

                        // Adjust outer wrapper to fit new list snuggly
                        var newHeight = base.$el.find("#"+listID).height();
                        $allListWrap.animate({
                            height: newHeight
                        });

                        // Remove highlighting - Add to just-clicked tab
                        base.$el.find("#menunav li a").removeClass("current");
                        $newList.addClass("current");

                    });

                }   

                // Don't behave like a regular link
                // Stop propegation and bubbling
                return false;
            });

        };
        base.init();
    };

    $.organicTabs.defaultOptions = {
        "speed": 300
    };

    $.fn.organicTabs = function(options) {
        return this.each(function() {
            (new $.organicTabs(this, options));
        });
    };

})(jQuery);

<body> 中使用 JS 进行工作在这里:http://jsfiddle.net/wsk78/

当我在 load 上更改它时,JS 无法正常工作在这里:http://jsfiddle.net/mAm6x/

我希望它能在 HTML 中工作...

提前致谢。

最佳答案

问题是您在调用它的下方定义了有机选项卡插件。这在主体包装模式下有效,因为插件代码会立即执行,而对插件的调用会被推迟,直到 jQuery 包装器准备好文档为止($(function() { ... })代码)。

使用 onLoad 时,插件代码不会执行,因为它等待 onLoad 事件。因此,当事件触发时,它不知道该插件,也无法调用它。

还要注意 jQuery 包装器 is deemed incompatibleonLoad 事件一起使用,所以我也删除了那段代码。

像这样修复它:

// organicTabs plugin below
// http://css-tricks.com/organic-tabs/
(function($) {
    $.organicTabs = function(el, options) {

        var base = this;
        base.$el = $(el);
        base.$nav = base.$el.find("#menunav");

        base.init = function() {

            base.options = $.extend({},$.organicTabs.defaultOptions, options);

            // Accessible hiding fix
            $(".hide").css({
                "position": "relative",
                "top": 0,
                "left": 0,
                "display": "none"
            }); 

            base.$nav.delegate("li > a", "click", function() {

                // Figure out current list via CSS class
                var curList = base.$el.find("a.current").attr("href").substring(1),

                // List moving to
                    $newList = $(this),

                // Figure out ID of new list
                    listID = $newList.attr("href").substring(1),

                // Set outer wrapper height to (static) height of current inner list
                    $allListWrap = base.$el.find(".list-wrap"),
                    curListHeight = $allListWrap.height();
                $allListWrap.height(curListHeight);

                if ((listID != curList) && ( base.$el.find(":animated").length == 0)) {

                    // Fade out current list
                    base.$el.find("#"+curList).fadeOut(base.options.speed, function() {

                        // Fade in new list on callback
                        base.$el.find("#"+listID).fadeIn(base.options.speed);

                        // Adjust outer wrapper to fit new list snuggly
                        var newHeight = base.$el.find("#"+listID).height();
                        $allListWrap.animate({
                            height: newHeight
                        });

                        // Remove highlighting - Add to just-clicked tab
                        base.$el.find("#menunav li a").removeClass("current");
                        $newList.addClass("current");

                    });

                }   

                // Don't behave like a regular link
                // Stop propegation and bubbling
                return false;
            });

        };
        base.init();
    };

    $.organicTabs.defaultOptions = {
        "speed": 300
    };

    $.fn.organicTabs = function(options) {
        return this.each(function() {
            (new $.organicTabs(this, options));
        });
    };

})(jQuery);

$("#content-switch").organicTabs();

fiddle :http://jsfiddle.net/mAm6x/3/

关于JavaScript 不会在加载时运行。如何在 HTML 中修复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22147131/

相关文章:

javascript - 使用 jQuery 改变 div 的颜色

作为字符串的 Javascript 网络错误

html - Wordpress 菜单上的灰色阴影

javascript - 使用 jsPdf Autotable 时出现错误

html - 如何在一个部分内水平放置按钮

javascript - 我使用 MDL 得到 2 个滚动条,我该如何修复它?

javascript - 数据到达 Controller 但不查看

javascript - knockout 嵌套 foreach 模板未按预期工作

javascript - Ajax 调用未从 Controller 返回成功

javascript - 随着窗口大小的变化自动调整标题大小