即如何修改Twitter 的引导输入代码以忽略符号 @ 之前的所有内容?因此,当用户输入电子邮件时,一旦输入@,我们应该从预定义的列表(如 gmail.com、yahoo.com、att.net 等)中为他推荐域。
问问题
2317 次
2 回答
1
不,如果没有一些额外的魔法,你就无法做到这一点。幸运的是,这个魔法非常简单有趣。我真的很喜欢解决这个难题:)
考虑我创建的这个例子。
$.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
,等等。
于 2012-04-11T20:13:53.143 回答
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'];
}
});
于 2014-03-07T04:17:45.883 回答