由于用户名的最大长度可以是18,所以我没有进行ajax调用term.length>2 && term.length < 18
,到目前为止还不错,但是当我键入这样的内容时,它继续进行ajax调用
ex : testing for mentions : @name and now spaces!!! ;
这是我正在使用的js代码。
$("#input").load().bind("blur keydown keypress keyup",function(){
var t = $("#input").val();
suggest(t);
function split(val){
return val.split(/@\s*/);
}
function extractLast(term){
return split(term).pop();
}
function suggest(inputString){
if(inputString.indexOf("@")>=0){
term=extractLast(inputString);
if(term.length>2 && term.length < 18){
$('#postInput').addClass('load');
var data = 'name=' + term;
$.ajax({
type:"POST",
url:"http://site.com/ajax/mentions",
data:""+term+"",
dataType:"html",
success:function(data){
if(data.length>0){$('#suggestions').fadeIn();
$('#suggestionsList').html(data);
$('#input').removeClass('load');}
}
});
}
else {
$('#suggestions').fadeOut();
}
}
}
});
答案 0 :(得分:0)
您可以使用jquery自动完成插件here
易于使用
答案 1 :(得分:0)
见:
我重新格式化了你的代码。基本上,您已在split
上声明的匿名函数中声明了函数extractLast
,suggest
和bind("blur keydown keypress keyup")
。
另请注意,keypresss
和keydown
会在用户输入第18个字符时触发,但在输入的value
属性中可用字符之前触发。所以在那一刻,文本长度仍然是17。
我的建议是只处理keyup
事件。这样做可确保最大长度验证。