在页面加载时调用功能,在按钮单击时再次调用,但具有不同的参数

时间:2012-08-06 07:45:12

标签: javascript jquery

我有一个Ajax函数,它可以提供Web方法的数据并将其显示在页面上。我想在页面加载时显示第一页有4个项目。单击该按钮时,应显示接下来的四个项目,等等。这在页面加载时执行,但是当我单击按钮时没有任何反应。

 $(document).ready(function () {
        var s;
        var countnumber = 0;
        function dos(s, countnumber) {

            participant = s.split("!");
            var i
            for (i = countnumber; i < countnumber + 4; i++) {
                part = participant[i].split("ٌ");

                rk = part[5];

                if (rk == 1) {
                    $("#ts" + i).attr('src', 'con1.png'); 
                } else if (rk == 2) {
                    $("#ts" + i).attr('src', 'con2.png');
                } else if (rk == 3) {
                    $("#ts" + i).attr('src', 'con3.png');
                } else if (rk > 3 && rk < 20) {
                    $("#ts" + i).attr('src', 'briliant.ico');
                } else if (arrlist[5] > 20 && arrlist[5] < 50) {
                    $("#ts").attr('src', 'cup.png');
                } else {
                    $("#ts" + i).attr('src', 'box.png');
                }
                    { $("#st" + i) }
                    $("#use" + i).html(part[1]);
                    $("#rnk" + i).html(part[5]);
                    $("#avg" + i).html(part[2]);
                    $("#pnt" + i).html(part[4]);
                    $("#wit" + i).html(part[3]);
                    $("#kl" + i).html(part[0]);
                    $("#use" + i).html(username);
                }

        }
        $('#kil').bind('click', function () {
            countnumber = countnumber + 4;
            dos(s , countnumber);
        })

        var arrlist;
        var participant, part;
        var username, klll, wt, pt, av, rk;


        $.ajax({
            type: "POST",
            url: "rank.aspx/bringdata",
            data: "",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: true,
            cache: false,
            success: function (ret) {
                s = ret.d;
                dos(s, 0);
            },
            error: function (x, e) {
                alert("error");
            }
        });
    });

1 个答案:

答案 0 :(得分:1)

从我understood开始,您试图通过dos()事件执行onclick=""功能。

它不起作用的原因很简单:从全局范围的角度来看,dos()不存在。

您需要做的是以下两种之一:

  1. dos()功能移至全局可访问的范围。
  2. 通过jQuery将dos()函数附加到click事件。
  3. 就个人而言,我更喜欢第二种选择,因为它避免了污染全局命名空间。

    来自本地变量

    示例:局部变量

    function f() {
        var x = 1;
    }
    
    process_x(x); # this will trigger a "ReferenceError: x is not defined"
    

    我相信您知道,无法从外部访问函数本地的变量。

    到本地函数 -

    在函数内部定义函数时,实质上是创建一个恰好是函数的局部变量。

    示例:函数声明,这是您拥有的表单:

    $(document).ready(function() { # enclosing_function
        function dos() {
    
        }
    });
    

    如前所述,这会导致dos()成为enclosing_function的本地人。

    ...基本上是同一件事

    你可以这样想,以更好地说明相似性:

    示例:函数表达式

    $(document).ready(function() { # enclosing_function
        var dos = function () {
    
        };
    });
    

    将结肠功能提升

    在该示例中,两个版本是等效的。但是,函数声明 - 即没有赋值的东西(那些被称为“函数表达式”) - 在顶部被“悬挂”代码的定义。

    这意味着,定义被移动(或“提升”)到定义它的范围的最顶层(或开头)。在定义该函数之前,不可能执行代码(在该范围内)。因此,您无法获得函数声明的ReferenceError。 (除非你的范围是错误的,否则就是这样。)

    另一方面,函数表达式的评估方式与所有其他语句的评估方式相同:只要程序流遇到它们。

    示例:吊装

    $(document).ready(function() { # enclosing_function
        # <- This is where "hoisted" is being defined <--
        non_hoisted(); # ReferenceError                 |
        hoisted();     # Works fine                     |
        var non_hoisted = function () { # This is where "non_hoisted" is defined
                                                        |
        };                                              ^
                                                    hoisting
        non_hoisted(); # Works fine                     ^
                                                        |
        function hoisted() { ------>-------->------->----
    
        }
    });
    

    还有一件事

    var s;
    function dos(s, countnumber) {
        ...
    }
    

    形式参数ss作为dos()函数内的局部变量引入。它将从其父作用域隐藏s变量。

    为什么将s作为参数传递给dos()函数?当Ajax请求成功返回时,您已将其分配给var s内的局部变量enclosing_function()