我正在设置一个表单来查找或在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