功能未在页面就绪时运行

时间:2015-03-27 16:16:25

标签: javascript jquery

我的代码设置如下:

$(document).ready(function() {
     select_a_color();
});

function select_a_color(){
     var myColors = ["#441540",
     "#20A923",
     "#EF5918",
     "#E33EF3",
     "#C6452B",
     "#F94B34",
     "#236BD4",
     "#51A224",
     "#6E3372"];
     var gencolor = myColors[Math.round(Math.random() * (myColors.length - 1))];
     alert(gencolor);
}

每次调用该函数时,都应该使用gencolor的值更改alert和(测试时)gencolor。我需要这个在我的页面最初加载时运行,因为AJAX查询需要颜色,但是当我的页面加载时我无法运行它。请注意,如果它不是函数,则会正确生成gencolor

我最终得到了未定义gencolor的错误。

我错过了什么?

UPDATE EDIT :做了一些更改,我得到了运行的功能,但它不会正确传递变量gencolor

var gencolor;
function selectColor(gencolor){
    var myColors = ["#441540",
        "#20A923",
        "#EF5918",
        "#E33EF3",
        "#B46BF9",
        "#D95AA3",
        "#622469",
        "#FB5AE8",
        "#51A224",
        "#6E3372"];
    var gencolor = myColors[Math.round(Math.random() * (myColors.length - 1))];
    alert(gencolor); //THIS WORKS!
}

function load_test_map2(gencolor) {
    selectColor();//THIS SUCCESSFULLY TRIGGERS THE FUNCTION AND ALERT WORKS
    console.log(gencolor); //THIS IS UNDEFINED
}

我正在尝试将gencolor变量传递给另一个函数,但它显然无效。

3 个答案:

答案 0 :(得分:0)

<!DOCTYPE html>
<html>
    <head>
        <title>test</title>
    </head>
    <body>


        <script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
        <script>
            $(document).ready(function() {
                select_a_color();
            });

        function select_a_color(){
        var myColors = ["#441540",
        "#20A923",
        "#EF5918",
        "#E33EF3",
        "#C6452B",
        "#F94B34",
        "#236BD4",
        "#51A224",
        "#6E3372"];
        var gencolor = myColors[Math.round(Math.random() * (myColors.length - 1))];
        console.log(gencolor);
        }
        </script>
    </body>
</html>

执行此操作并查看控制台并刷新页面,我得到以下输出:

#F94B34 #51A224 #E33EF3 #F94B34 ..

所以它似乎有效。 也请console.log( message )代替alert()。 你是否还包括jQuery 之前脚本?

答案 1 :(得分:0)

我在您的修改历史记录中看到原始代码是

function load_test_map2() {
    $(document).ready(function() {
        select_a_color();
    });

function select_a_color(){
var myColors = ["#441540",
"#20A923",
"#EF5918",
"#E33EF3",
"#C6452B",
"#F94B34",
"#236BD4",
"#51A224",
"#6E3372"];
var gencolor = myColors[Math.round(Math.random() * (myColors.length - 1))];
alert(gencolor);
}

只有两个错误

  1. 您忘了关闭load_test_map2()功能。但我们假设您忘记复制封闭式括号。
  2. 您不必在load_test_map2中接下来这两个功能,但如果您这样做,则需要调用它。
  3. 试试这个Fiddle,这是对原始代码的修改

答案 2 :(得分:0)

你有一些小错误 - 主要是在全局声明后,在选择颜色函数中声明var gencolor。

这很好(见in this fiddle):

//global var
var gencolor;

$(document).ready(function() {
     load_test_map2();
});

function selectColor(){
     var myColors = ["#441540",
     "#20A923",
     "#EF5918",
     "#E33EF3",
     "#C6452B",
     "#F94B34",
     "#236BD4",
     "#51A224",
     "#6E3372"];
     // set the global var, don't redeclare it
     gencolor = myColors[Math.round(Math.random() * (myColors.length - 1))];
}

function load_test_map2() {
    selectColor();
    alert(gencolor); 
}