2015-07-19 55 views
1

我有一个提交按钮,点击它时,一个模式对话框引起下面的代码来执行:错误在JavaScript关闭

$("#addqueuebutton").on("click",function(){ 

    var counter = 0; 
    return function(){ 
     counter += 1; 
     ... 
     alert(counter); 
    }; 
}); 

我必须确保counter被初始化只有一次,所以我尝试使用闭包。但是由于警告框没有出现,代码没有正确执行。我在线编译器上测试了代码,看起来是正确的。有人可以告诉我,我的语法是否有问题?

+0

尝试调用你的函数http://jsfiddle.net/xn24as5b/ –

回答

5

您将错误的功能分配给click。当您单击时,您初始化counter,然后返回内部函数。

您需要调用外部函数并将其返回值分配给第二个参数on()

});应该}());

或者,这样可以很清楚:

function create_counter(){ 
    var counter = 0; 

    return function(){ 
     counter += 1; 
     ... 
     alert(counter); 
    }; 
} 

var counter_incrementing_function = create_counter() 

$("#addqueuebutton").on("click", counter_incrementing_function); 
+0

OK,你是对的。我第一次使用闭包,所以让我试着理解这一点 - 通过使用括号对,我打电话给外部函数。早些时候,内部功能被称为? – user3033194

+1

@ user3033194 - 否。当您单击它返回的元素时,但预计会出现一个布尔值,因此它被(有效)转换为“true”并且从不调用。 – Quentin

+0

我现在看到了,非常感谢你! – user3033194