2013-07-16 131 views
0

使用客户端脚本,我有点虚弱(或者可能很弱)。我试图实现一个延迟调用,以便在用户停止键入后等待500毫秒时执行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

只需从传递给'delay()'的函数中移除'thisElement'参数即可。其他一切看起来都正确 – techfoobar

回答

1

这应该工作:

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

由于closures在JavaScript中,event是提供给您传递到delay甚至你的事件处理函数退出后的匿名函数。您可以使用event.target来确定触发事件的元素。

0

这只是setTimeout没有给出任何函数参数的结果。如果您从函数中删除参数,则您的代码应该已经可以工作,因为此刻它将为undefined(因为setTimeout未传递参数)。

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