如果插入空格,如何不停止自动完成

时间:2012-04-29 19:33:36

标签: javascript jquery ajax autocomplete

由于用户名的最大长度可以是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();
    }
 }
}
});

2 个答案:

答案 0 :(得分:0)

您可以使用jquery自动完成插件here

易于使用

答案 1 :(得分:0)

见:

http://jsfiddle.net/64ag5/

我重新格式化了你的代码。基本上,您已在split上声明的匿名函数中声明了函数extractLastsuggestbind("blur keydown keypress keyup")

另请注意,keypressskeydown会在用户输入第18个字符时触发,但在输入的value属性中可用字符之前触发。所以在那一刻,文本长度仍然是17。

我的建议是只处理keyup事件。这样做可确保最大长度验证。