0

我在客户端脚本方面有点弱(或者可能很弱)。我正在尝试在用户停止输入后等待 500 毫秒来实现延迟调用以执行 ajax 保存。

我在这里找到了这个很棒的解决方案。但是我生成的函数需要触发保存的原始元素。我怎样才能通过这个值?

这是我的调用代码:

$('#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 需要将原始元素传递给它。

4

2 回答 2

1

这应该有效:

$('#OrderDetailsTabs').on('keyup', 'form[id^="frmWorkOrderHdr"] textarea', function (event) {
        delay(function () {
            alert('Time elapsed!');
            saveWOHdr(event.target);
            },
            1000);
    })

由于JavaScript中的闭包,即使在事件处理函数退出后,您event传入的匿名函数也可以使用。delay您可以使用event.target找出触发事件的元素。

于 2013-07-16T03:27:48.267 回答
0

这只是setTimeout不提供任何函数参数的结果。如果您从函数中删除参数,那么您拥有的代码应该已经可以工作,因为它现在会存在undefined(因为setTimeout没有传递参数)。

$('#OrderDetailsTabs').on('keyup', 'form[id^="frmWorkOrderHdr"] textarea', function (event) {
    var thisElement = this;
    delay(function () {
        alert('Time elapsed!');
        saveWOHdr(thisElement);
        },
        1000);
})
于 2013-07-16T03:29:17.047 回答