2011-02-17 14 views
0

這是一個非常基本的JavaScript問題,可能重複,但我不知道答案!jQuery/JavaScript:中斷事件?

我的代碼如下:

function userlist_change(myval, function_type) { 
    // relatively slow code involving Ajax call 
    // based on Ajax results, change some client-side stuff 
} 
$("#subjectlist").change(function() { 
    userlist_change($("#subjectlist").val(), 'change'); 
}).change(); 
$("#subjectlist").keypress(function() { 
    userlist_change($("#subjectlist").val(), 'keypress'); 
}); 

我有問題,如果.change()事件被調用時,userlist_change功能揭開序幕,這是相對緩慢的。如果用戶再次更改列表(例如,通過鍵入),我的代碼將等待userlist_change完成,然後用新值重新啓動它。

這在UI中看起來很奇怪,因爲更改客戶端的任何操作都需要幾秒鐘的時間 - 有時第一次調用的結果僅在用戶已經進行第二次調用後纔會出現。

.change()或`keypress()事件被觸發時,有什麼辦法可以中斷任何現有的userlist_change進程嗎?

[編輯]什麼是理想的是一個簡單的'用​​這個名字殺死任何正在運行的功能'命令 - 這可能嗎?或者我真的不得不擺弄定時器?!

回答

1

你可以最後請求時間存儲在一個全局變量,存儲請求時,在每個Ajax請求,所以,當你只是顯示第一個請求的結果,如果全局最後一次請求時間大於請求,請求時間,則應顯示,否則不顯示。例如:

var lastRequestTime; 

function userlist_change(myval, function_type,requestTime) { 

    // relatively slow code involving Ajax call 
    // based on Ajax results, change some client-side stuff 

if(lastRequestTime <= requestTime){ 
//show 
} 
} 
$("#subjectlist").change(function() { 
    lastRequestTime = new Date(); 
    userlist_change($("#subjectlist").val(), 'change',lastRequestTime); 
}).change(); 
$("#subjectlist").keypress(function() { 
    lastRequestTime = new Date(); 
    userlist_change($("#subjectlist").val(), 'keypress',lastRequestTime); 
});