将原始元素传递给回调

时间:2013-07-16 03:18:39

标签: javascript jquery keyboard

我在客户端脚本方面有点弱(或者可能很弱)。我试图在用户停止输入后等待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需要将原始元素传递给它。

2 个答案:

答案 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);
})