如何清除javascript变量的值?

时间:2009-06-25 11:15:17

标签: javascript jquery ajax

我正在使用javascript var来控制ajax调用的运行。该调用是通过单击事件(在“#week _tag”div上)触发的,并且每页加载只需运行一次。相同的单击事件也会切换滑动窗格(“#week_summary”)的显示,其中显示来自ajax调用的数据。

在下面的示例中,我尝试使用变量和if语句禁止在用户第二次单击“#week _tag”div以关闭滑动时调用ajax调用窗格。加载页面时var状态设置为“before”,一旦进行ajax调用,设置为“after”。如果var status等于“before”,则运行调用,否则只切换“#we_s_smarymary”。它不起作用,因为我不知道如何将var“status”赋予“after”的第二个值。有什么想法吗?

$(document).ready(function(){
    var status = "before";
    alert("before:"+status);

    $('#week_tag').click(function(){
        if(status =="before"){
            alert("afterclick:"+status);
            var form_date_set = $("input[name='date_set']").val();

            $.post("/tortus/index.php/daylog/build_summary",
                {date_set:form_date_set}, 
                function(html){
            $("#week_summary").html(html);

            var status = "after";
            });
        }

        $('#week_summary').toggle('blind');

        alert("after:"+status);

        });

     });

2 个答案:

答案 0 :(得分:4)

那是因为你在回调函数中声明了一个新变量,给它本地范围。如果从回调函数中删除var,它应该按预期工作。

 $.post("/tortus/index.php/daylog/build_summary",
            {date_set:form_date_set}, 
            function(html){
               $("#week_summary").html(html);

               status = "after";
               alert("status: " + status);
        });

编辑:当然,正如下面的评论中所述,由于呼叫是异步的,因此您还需要提醒回调状态。或者在一些随机元素上创建一个新的onclick事件,它只显示状态:

$(document).ready({
   var status = "before"
   ...
   //your previous onclick event here
   ...
   $("#newElm").click(function() {
      alert("status: " + status);
   });
});

答案 1 :(得分:2)

如果您希望您的点击处理程序只运行一次,请使用.one方法绑定您的处理程序。这保证只会调用一次,因为您的处理程序在事件发生时自动解除绑定,就在运行代码之前。请参阅docs.jquery.com上的.one documentation

使用示例:

$('#week_tag').one('click', function() {
    // This code will only be run once, after #week_tag got clicked on.  
});

使用此方法您根本不需要跟踪状态,jQuery会为您解决此问题。