【问题标题】:how to not stop the autocomplete if a space is inserted如果插入空格,如何不停止自动完成
【发布时间】:2012-04-30 04:07:50
【问题描述】:

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

【问题讨论】:

  • 您能否将“console.log(term + "has a length :" + term.length); 放在 $ajax 调用之上,以便查看它尝试发送到 url 的参数?跨度>
  • 如果从绑定到输入的事件中删除 keydownkeypress 会发生什么?
  • 因为在 @ 之后有 name = 4
  • @Chopin 很好,它做同样的事情 :) 如果我按空格键,它会每隔一段时间进行一次 ajax 调用
  • 请注意,如果您这样做,您将多次触发 ajax 调用,每个事件一个。

标签: javascript jquery ajax autocomplete


【解决方案1】:

看这个:

http://jsfiddle.net/64ag5/

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

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

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

【讨论】:

  • 好的,我会改变它 :) 谢谢@Chopin,但如果点击空格键,它仍然会调用 ajax
  • @EvenJohnson 您的具体意见是什么?
  • split 之后的字符串中仍会考虑尾随空格。如果这是你想要的,你可以trim()
  • 好的,我明白了。您可以检查键码,以检测是否是空格。但是如果你在乎的话,你必须区分它是添加在名称的末尾还是中间。
【解决方案2】:

可以使用jquery自动补全插件here

简单易用

【讨论】:

  • 我不想使用插件 :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-27
  • 1970-01-01
  • 2011-07-09
  • 1970-01-01
  • 2012-12-27
  • 2015-07-31
  • 2015-11-20
相关资源
最近更新 更多