代码之家  ›  专栏  ›  技术社区  ›  kevtrout

如何清除javascript变量的值?

  •  2
  • kevtrout  · 技术社区  · 15 年前

    _tag “div),并且每次页面加载只需要运行一次。相同的单击事件还切换滑动窗格(“week#u summary”)的显示,其中显示来自ajax调用的数据。

    在下面的示例中,我试图使用一个变量和一个if语句来禁止在用户单击“#week”时调用ajax调用 _标签 第二次“div”关闭滑动窗格。加载页面时,var状态设置为“before”,ajax调用后,var状态设置为“after”。如果var状态等于“before”,则调用将运行,否则“#week_summary”只是切换。它不起作用,因为我不知道如何给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 回复  |  直到 5 年前
        1
  •  4
  •   peirix    15 年前

    这是因为您在回调函数中声明了一个新变量,并赋予它局部作用域。如果您删除 var 从回调函数中,它应该按预期工作。

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

    $(document).ready({
       var status = "before"
       ...
       //your previous onclick event here
       ...
       $("#newElm").click(function() {
          alert("status: " + status);
       });
    });
    
        2
  •  2
  •   Martijn Pieters    15 年前

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

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

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