我的脚本检测到某个文本输入上按下某个键的时间。这种方法的问题在于它还可以检测何时按下了移位和控制等按键。我只希望在实际更改文本输入时执行我的ajax脚本。就像我说的那样,on('keydown',function())可以工作,但是当我输入字段时,on('change',function())将不会做任何事情。不确定这里发生了什么。
$(document).on('change', '[rel^="liveSearch"]', function () {
console.log('key pressed');
if($(this).length >= 3){
var fieldName = $(this).prop("name");
var searchMenu = $('#liveSearch');
$.ajax({
url: searchMenu.data('ajax-url')+'/'+$('input[name="'+fieldName+'"]').val(),
dataType: "xml",
statusCode: {
404: function(){alert("404 not found!")}
}
})
.done(function(xml){
if($(xml).find('member').length > 0){
$(xml).find('member').each(function(){
var memberId = $(this).attr("mid");
var memberName = $(this).find('displayname').text();
searchMenu.html('<li onclick="appendValue(\''+fieldName+'\', \''+memberId+'\');hideMenu(\''+searchMenu+'\');">'+memberName+'</li>');
searchMenu.show();
});
} else {
searchMenu.html('');
searchMenu.hide();
}
});
}
});
答案 0 :(得分:0)
记住输入字段的上一个值。您可以将其存储在数据属性中。然后在keydown上比较两个值并仅在它们不匹配时执行ajax请求。这样,如果数据没有改变,你将避免命中服务器。
答案 1 :(得分:0)
change
事件在您离开之前不会触发文本输入字段。
要检测何时在输入中键入了真实字符键,请使用keypress
事件而不是keydown
。