我正在尝试弄清楚如何使用闭包函数。在单击事件中,我希望确定parm1和parm2的值并将其显示在div中,然后使用SQL语句将新值更新到表中。
如果用户重复单击,我希望在用户停止单击后5秒进行节流(去抖动)和SQL更新。但是,应该在每次单击时显示parm1和parm2。
我不确定如何将参数传递给SQL进程。
(function() {
// create debounced function
var d_process = $.debounce(SQLprocess, 5000);
$('#myButton').click(function() {
// determine parameters
var parm1 = 1 + 1; // edit: added var
$(".div_1").text(parm1);
var parm2 = 2+2; // edit: added var
$(".div_2").text(parm2);
d_process();
});
}());
function SQLprocess(parm1, parm2) {
//perform an SQL update
}参考:http://code.google.com/p/jquery-debounce/
发布于 2011-11-09 13:34:25
要将带参数的SQLprocess传递给debounce函数,请更改以下内容:
var d_process = $.debounce(SQLprocess, 5000);要这样做:
var d_process = $.debounce(function() {SQLprocess(parm1, parm2)}, 5000);这将创建一个不带任何参数的匿名函数,该函数将传递给creates。但是这个匿名函数使用正确的参数调用SQLprocess。
有些人会问为什么你不能这样做:
var d_process = $.debounce(SQLprocess(parm1, parm2), 5000);答案是因为,在Javavscript语言中,SQLprocess(parm1, parm2)是一个函数调用。它将立即执行该函数,并将返回值传递给$.debounce(),而这并不是您想要的。$.debounce需要一个没有参数的函数,所以这就是你必须要传递的。将参数传递给SQLprocess的方法是将其封装在一个没有参数的函数中。它不一定是匿名函数。如果您愿意,也可以使用命名函数如下所示:
function myFunctionWrapper() {
SQLprocess(parm1, parm2);
}
var d_process = $.debounce(myFunctionWrapper, 5000);https://stackoverflow.com/questions/8060459
复制相似问题