使用jQuery创建HTML元素并不总是有效

时间:2012-11-29 11:06:39

标签: javascript jquery backbone.js underscore.js

我正在为我们的项目构建一个实时主题选择器,它的工作原理。那很棒!但我还剩下一个虫子,我无法解决,这让我发疯了。

这就是问题:在您加载主题选择器页面的那一刻,骨干应用程序(它是使用Backbone JS,Underscore JS和jQuery构建)启动。在初始化时,应用程序会查找几个内容,其中一个问题是:我需要为当前主题使用什么颜色集(当前主题设置存储在数据库中)。

这是在初始化时调用的函数:

    // Select the colorset for the first time a new theme is picked
    selectColorset: function( newTheme ) {
        // Check or this is a new theme or not
        var themeCheck = ( typeof newTheme !== "undefined" ) ? true : false,
            colorset = ( !themeCheck ) ? parseInt( $("#js-colorset-input").val() , 10 ) : 0;

        // Select the right list
        $("#js-theme-colors ul").eq( colorset ).addClass("selected-set");
        this.renderColorStyle( colorset );
    }

正如您所看到的,此功能有两种使用方式:首先是初始化,另一种是切换到其他主题。

首先我抬头看看:为什么要调用这个函数?它是在更改事件上调用,还是在初始化时调用。如果在初始化时调用它,newTheme变量将不会保存任何数据。

初始化时,颜色集编号将是页面上隐藏字段中的数字。所以现在我们得到了颜色集号,我们可以渲染颜色集样式表(this.renderColorStyle(colorset)):

    // Insert the color stylesheet
    renderColorStyle: function( colorset ) {
        // Check or the colorset is given
        if( typeof colorset === "undefined" || colorset === "" ) {
            colorset = 0;
        }

        // Define the stylesheet for this theme
        if( $("#js-theme-iframe").contents().find("#js-theme-colorset").length > 0 ) {
            // Change the current stylesheet
            $("#js-theme-iframe")
                .contents()
                .find("head #js-theme-colorset")
                .attr("href", "stylesheets/themes/theme-" + this.themeID + "/theme-color-" + colorset + ".css");
        } else {
            // Insert a new stylesheet
            var stylesheet = $("<link />", {
                href: "stylesheets/themes/theme-" + this.themeID + "/theme-color-" + colorset + ".css",
                rel: "stylesheet",
                id: "js-theme-colorset"
            });

            // Append the stylesheet to the iframe
            $("#js-theme-iframe").contents().find("head").append( stylesheet );
        }
    }

正如你所看到的,我首先检查或者我们有一个颜色集(只是为了确定),因为我们在初始化时没有颜色设置样式表,我们将构建一个。这是通过jQuery完成的。如您所见,我正在使用href,rel和id构建元素(用于查找颜色集样式表)。

但是jQuery在初始化时继续给我一个空数组。所以样式表不存在..所有数据都存在,当我使用console.log()函数查看或数据确实存在时,事实证明它是。所以那不是它。

但我真的不知道为什么会这样。因为如果我在一个主题更改上调用这些函数,它一切正常,jQuery创建样式表..所以只有在初始化它不起作用,它让我疯了..

希望有人可以解释我每次调用完全相同的函数是怎么可能的,但是在初始化时它有另一个输出(具有相同的数字和变量)而不是主题更改..

1 个答案:

答案 0 :(得分:0)

整个问题是:在我初始化iFrame之前,我调用了selectColorset()。感谢@Leandro,我发现,那是我的错。谢谢您的帮助!