我正在設置一個表單來查找或在Web應用程序中創建新的城市記錄。我需要城市的文本字段進行以下操作:按鍵延遲,如何限制只執行一次函數調用?
- 接收到文本輸入後,顯示一個「微調器」,指示計算機正在處理輸入。
- 用戶停止鍵入1秒後,發送ajax請求以檢查輸入。
- 迴應狀態(輸入是否有效)。
我有這個幾乎工作,但我有一個主要問題:我寫的延遲腳本的作品,但延遲結束後,它運行的延遲期間發生的每個keyup一次函數的其餘部分。我希望它只運行一次。這裏是我正在使用的代碼(控制檯日誌事件將與其他功能來代替以後調用):
$(function() {
locationSelector.initialize();
});
var locationSelector = {
initialize: function() {
locationSelector.bindCityName $('input#city_name')
},
city: {
status: function(status) {
console.log("Status message: " + status);
},
error: function(message) {
console.log("Error message: " + message);
}
},
bindCityName: function(selector) {
selector.on('keyup', function() {
locationSelector.city.status('loading');
var timer = null;
if(timer) {
window.clearTimeout(timer);
}
timer = window.setTimeout(
function() { locationSelector.getCity(selector); },
1000
);
});
},
getCity: function(selector) {
if(selector.val() == "") {
locationSelector.city.error('Cannot be blank.');
} else {
console.log("AJAX REQUEST");
}
}
};
爲什麼getCity
功能被每一次KEYUP運行,我該怎麼解決呢?另外,說實話,我是一個JavaScript新手,所以我會很感激任何其他建議,如何改善這個代碼腳手架。
謝謝!
jfriend and dbaseman,謝謝你的回答。既然你們都給出了基本相同的答案,我已經選擇了dbaseman,因爲他早已過了1分鐘,而且代表人數大大減少了。 Upvote因爲他們都有幫助。謝謝! – Andrew 2012-04-15 00:35:18