更新函数JQuery中的变量

时间:2016-12-03 13:45:13

标签: javascript jquery html function

尝试在jquery中重置按钮事件中的变量时遇到问题。此变量表示在div中加载的页面。然后使用setInterval函数,我用存储在变量中的页面刷新div元素。 这是代码:

$( document ).ready(function() {
    var current_page="data.php";    //For update-the first page shown is data.php

    //At startup
    $("#content").load("/data.php",function(response){
        //current_page="data.php"; The first command-current_page already set to "data.php"
        if(response=="0"){
            location.href="http://website.com";
        }
    });

    //JS refresh timer
    setInterval(function(){
        alert(current_page);    //Always shows 'data.php'->means it is not updated

        if(current_page!="insert.php"){
            $("#content").load("/"+current_page,function(response){
                if(response=="0"){
                    location.href="http://website.com";
                }
            });
        }
    },5000);    //5 seconds


    //EVENTS

    //Menu links pressed 
    $(".menu_link").click(function(){
        var page=$(this).attr("data-page");
        current_page=page;      //Here it works.

        $("#content").load("/"+page,function(response){
            if(response=="0"){
                location.href="http://website.com";
            }
        });
    });
});

//Outside Jquery 'document'
  //Select user button pressed
  function loadData(){
    var user_id=$("#menu_selector option:selected").val();
    current_page="users.php?user_id="+user_id;     //Not globally updated;inside function it is set.

    $("#content").load("/users.php?user_id="+user_id,function(response){
        if(response=="0"){
            location.href="http://website.com";
        }
    });

}

我通过输入代码“alert”语句测试了current_page的值。结论:在setInterval函数中, current_page 变量始终设置为“data.php”。如果我删除第一行var current_page="data.php";,则 current_page 为“未定义”。看起来它没有被loadData函数更新。
我也尝试在JQuery加载中移动 loadData 函数,但是按钮找不到它(我使用{{1} })
问题在哪里?

2 个答案:

答案 0 :(得分:1)

current_page 变量函数范围内,该函数作用于该函数。 loadData 中函数外部的行:

current_page="users.php?user_id="+user_id; 

实际上将设置另一个变量,仍称为current_page,但在 window 对象上。您应该可以在Chrome开发工具中看到这一点。

如果你需要能够从$()函数外部操作它,你必须用更全局的范围声明它(比如对窗口对象或者创建你自己的命名空间对象)。

答案 1 :(得分:0)

我解决了。正如马克威廉姆斯所写的那样,变量并不足够全球化#34;因此,不是创建命名空间,而是将声明移到jquery代码之外:

var current_page="data.php";    //Moved outside
$( document ).ready(function() {
    //At startup
    $("#content").load("/data.php",function(response){
        //current_page="data.php"; The first command-current_page already set to "data.php"
        if(response=="0"){
            location.href="http://website.com";
        }
    });

    //JS refresh timer
    setInterval(function(){
        alert(current_page);    //Always shows 'data.php'->means it is not updated

        if(current_page!="insert.php"){
            $("#content").load("/"+current_page,function(response){
                if(response=="0"){
                    location.href="http://website.com";
                }
            });
        }
    },5000);    //5 seconds


    //EVENTS

    //Menu links pressed 
    $(".menu_link").click(function(){
        var page=$(this).attr("data-page");
        current_page=page;      //Here it works.

        $("#content").load("/"+page,function(response){
            if(response=="0"){
                location.href="http://website.com";
            }
        });
    });
});

//Outside Jquery 'document'
  //Select user button pressed
  function loadData(){
    var user_id=$("#menu_selector option:selected").val();
    current_page="users.php?user_id="+user_id;     //Not globally updated;inside function it is set.

    $("#content").load("/users.php?user_id="+user_id,function(response){
        if(response=="0"){
            location.href="http://website.com";
        }
    });