2013-07-16 183 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); 
})