我在客户端脚本方面有点弱(或者可能很弱)。我试图在用户停止输入后等待500ms后实施延迟调用以执行ajax保存。
我发现了great solution here。但是我的结果函数需要触发保存的原始元素。我怎样才能传递这个值?
这是我的主叫代码:
$('#OrderDetailsTabs').on('keyup', 'form[id^="frmWorkOrderHdr"] textarea', function (event) {
var thisElement = this;
delay(function (thisElement) {
alert('Time elapsed!');
saveWOHdr(thisElement);
},
1000);
})
这是延迟变量定义:
var delay = (function () {
var timer = 0;
return function (callback, ms) {
clearTimeout(timer);
timer = setTimeout(callback, ms);
};
})();
saveWOHdr需要将原始元素传递给它。
答案 0 :(得分:1)
这应该有效:
$('#OrderDetailsTabs').on('keyup', 'form[id^="frmWorkOrderHdr"] textarea', function (event) {
delay(function () {
alert('Time elapsed!');
saveWOHdr(event.target);
},
1000);
})
由于JavaScript中的closures,即使您的事件处理函数退出,event
也可用于传递到delay
的匿名函数。您可以使用event.target找出触发事件的元素。
答案 1 :(得分:0)
这只是setTimeout
没有给出任何函数参数的结果。如果从函数中删除参数,那么你所拥有的代码应该已经有效了,因为它现在是undefined
(因为setTimeout
没有传递参数)。
$('#OrderDetailsTabs').on('keyup', 'form[id^="frmWorkOrderHdr"] textarea', function (event) {
var thisElement = this;
delay(function () {
alert('Time elapsed!');
saveWOHdr(thisElement);
},
1000);
})