【问题标题】:How to implement e-mail autocompletion with Twitter's bootstrap typeahead?如何使用 Twitter 的 bootstrap typeahead 实现电子邮件自动补全?
【发布时间】:2012-04-11 18:53:47
【问题描述】:

即如何修改Twitter's bootstrap typeahead 代码以忽略符号@ 之前的所有内容?因此,当用户输入电子邮件时,一旦输入@,我们应该从预定义的列表(如 gmail.com、yahoo.com、att.net 等)中为他推荐域。

【问题讨论】:

    标签: javascript jquery email twitter-bootstrap typeahead


    【解决方案1】:

    不,如果没有一些额外的魔法,你就无法做到这一点。幸运的是,这个魔法非常简单有趣。我真的很喜欢解决这个难题:)

    考虑一下我创建的这个example

    $.fn.typeahead.Constructor.prototype.select = function() {
        var val = this.$menu.find('.active').attr('data-value'),
            newVal = this.$element.val().replace(/@.*$/, '@' + val);
        this.$element.val(newVal);
        this.$element.change();
        return this.hide();
    };
    
    $('#email').typeahead({
        source: ['gmail', 'hotmail', 'yahoo'],
        matcher: function(item) {
            var m = this.query.indexOf('@'),
                search;
    
            if (!~m) {
                return false;
            }
    
            search = this.query.substr(m + 1).toLowerCase();
            return search.length && ~item.toLowerCase().indexOf(search);
        }
    });
    

    首先,您需要定义您的自定义matcher 函数,以定义哪些值被认为是合适的。这很容易。复杂的部分是您需要更改 Typeahead 原型以使插件设置正确的输入字段的新值:例如不是gmail、'yahoo',而是完整的电子邮件地址,如tomas@gmail.com等。

    【讨论】:

    • 很好 ;) 感谢您编写代码。有没有办法在下拉列表中显示完整的电子邮件(tomas@gmail.com、tomas@mail.com)? (所以用户不会混淆选择的值(gmail.com、mail.com)将替换他输入的值(tomas)?
    • 非常感谢,dfsq!我怎样才能使这些matcherrender 字段仅适用于一个字段,因为我有一个电子邮件字段和许多其他字段,标准typeahead 应该可以工作。请看这个演示 - jsfiddle.net/hyxMh/9
    【解决方案2】:

    其实我们不需要做一些扩展,像这样使用ajax函数就可以了。

    $('.typeahead').typeahead({
        source: function (typeahead, query) {
    
         var con = $('#input1').val();
         var atpos = con.indexOf('@');
         if(atpos==-1){
            return [con+'@gmail.com',con+'@sina.com',con+'@qq.com',con+'@126.com'];
         }else if(atpos>0){
             //get value before @
             var tmp = con.substr(0,atpos);
             return [tmp+'@gmail.com',tmp+'@sina.com',tmp+'@qq.com',tmp+'@126.com'];
         }else{
    
         }
         //return ['alpha','beta','bravo','delta','epsilon','gamma','zulu'];
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-01
      • 1970-01-01
      • 2013-07-13
      相关资源
      最近更新 更多