2012-04-11 10 views

答えて

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'ですが、[email protected]などの完全な電子メールアドレス

+0

ニース;)コーディングありがとうございます。完全な電子メール([email protected]、[email protected])をドロップダウンで表示する方法はありますか? (gmail.com、mail.com)は、入力したもの(tomas)を置き換えますか? –

+0

すべてがこの世界で可能です!http://jsfiddle.net/hyxMh/7/ – dfsq

+0

またはhttp://jsfiddle.net/hyxMh/8/ – dfsq

0

実際には、これを拡張する必要はありません。このような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']; 
    } 
}); 
関連する問題