简介:根据用户输入文本框的内容在下方弹出一个完整Email列表供用户选择;用户可以按上下键进行选择,可以按回车键选中,也可以用鼠标点击选中;附件是一个小例子
/**
* 根据用户键入内容生成下方提示邮箱列表,主要功能:
* 1.支持按键上、下键循环选择
* 2.支持回车选中内容
* 3.支持鼠标选中内容
* 4.失去焦点时获取当前选择内容
* 特点:
* 1.采用绝对定位,不用担心布局问题
* 2.基于ext-core 3.0支持主流浏览器
* BUG;
* 1.ie6下出现的滚动条时会挡住最下方提示内容
* 2.ie6、chrome不能通过拖动横向滚动条查看全部提示
* 3.ie6下样式有点小问题
*
* @author chemzqm@gmail.com
* @version 1.0
* @since 2010-4-8
*/
Ext.ns('Ext.ux');
Ext.ux.EmailTip = Ext.extend(Ext.util.Observable, {
suffix: ['126.com', '163.com', 'gmail.com'],
pattern: /^(\w+)([\-+.][\w]+)*$/,
editing: false,//编辑状态标实
KEYUP: 38,
KEYDOWN: 40,
KEYENTER: 13,
constructor: function(elId, config){
config = config || {};
Ext.apply(this, config);
Ext.ux.EmailTip.superclass.constructor.call(this, config);
this.el = Ext.get(elId);
this.initEvents();
},
initEvents: function(){
this.el.on('keyup', function(e, t, o){
e.preventDefault();
if (this.editing) {
switch (e.getKey()) {
case this.KEYUP:
this.moveSelect(false);
return;case this.KEYDOWN:
this.moveSelect(true);
return;case this.KEYENTER:
this.setSelectedValue();
return;default:
this.showTipes();
}
}
else {
this.showTipes();
}
}, this);
this.el.on('blur', this.setSelectedValue, this);
},
setSelectedValue: function(set){
if (!this.editing)
return;
this.editing = false;
var sDom = this.tipDiv.child('.hover');
if (sDom && set !== false)
this.el.dom.value = sDom.child('li').dom.innerHTML;
this.tipDiv.removeAllListeners();
this.tipDiv.dom.innerHTML = '';
this.tipDiv.hide();
},
moveSelect: function(isDown){
var items = this.tipDiv.select('li');
var startindex = 0;
var count = items.getCount();
var find = false;
items.each(function(el, th, index){
if (el.parent().hasClass('hover')) {
startindex = (count + index +(isDown ? 1 : -1)) % count;
find = true;
return false;
}
});
startindex = (!find && !isDown) ? count - 1 : startindex;
items.item(startindex).parent().radioClass('hover');
},
/**
* 获取列表数组,没有时返回空数组
*/
getTipList: function(){
var value = this.el.dom.value;
var values = value.split('@');
if (!this.pattern.exec(values[0])) {//用户名不合法
return [];
}
var list = [];
if (value.indexOf('@') != -1) {
Ext.each(this.suffix, function(str){
if (!values[1]) {//只有@没有后缀
list.push(values[0] + '@' + str);
}
else
if (str.indexOf(values[1]) == 0)//后缀匹配
list.push(values[0] + '@' + str);
});
}
else {
Ext.each(this.suffix, function(str){
list.push(values[0] + '@' + str)
});
}
return list;
},
showTipes: function(){
var Helper = Ext.DomHelper;
if (!this.tipDiv) {
this.tipDiv = Helper.insertAfter(this.el, {
tag: 'div',
cls:'tipDiv'
}, true);
this.tipDiv.setStyle({
top: this.el.getY() + this.el.getHeight() + 'px',
left: this.el.getX() + 'px',
width: this.el.getWidth() - 2 + 'px'
});
}
this.tipDiv.removeAllListeners();
this.tipDiv.dom.innerHTML = '';
var list = this.getTipList();
if (list && list.length != 0) {
Ext.each(list, function(tip){
Helper.append(this.tipDiv, {
tag: 'li',
cls: 'tips',
html: tip
}, true).wrap();
if(Ext.isIE6){
//TODO ie6滚动条会挡住内容,暂时无法解决
}
}, this);
this.tipDiv.on('mouseover', function(e, t){
Ext.fly(t).parent().radioClass('hover');
}, this, {
delegate: 'li'
});
this.tipDiv.show();
this.editing = true;
}
else {
this.tipDiv.hide();
this.editing = false;
}
}
});
.hover{
background-color:#0464BB;
}
.tipDiv{
position:absolute;
background-color:white;
border:1px solid black;
z-index:999;
height:auto;
overflow:auto;
}
.tipDiv li{
list-style:none;
display:inline;
cursor:pointer;
}
.tipDiv div{
height:18px;
margin:0px;
}
- 大小: 7.5 KB
分享到:
相关推荐
EXT框架是一个基于JavaScript的富客户端应用开发库,它提供了丰富的组件库,包括我们这里讨论的“自动完成”控件。在EXT中,这种功能通常通过Combobox组件实现,它允许用户在输入文本时获取匹配的建议列表。 描述中...
1,abkemail.ZIP 简单的email控件(18KB ) 2,abkpop.ZIP 一个简单的POP3控件(5KB) 3,winpopup.ZIP 允许您的 VB 程序通过网络发送和接收 Winpopup 信息(20KB) 4,autodial.ZIP 自动拨号的控件(30...
在IT行业中,发送电子邮件是日常工作中非常常见的任务,特别是在自动化和程序化通信中。这个"发送邮件和附件的免费控件&示例"提供了一种简单的方法,通过使用SMTP.OCX控件来实现这一功能。SMTP(Simple Mail ...
3. 控件生成:在GUI层面上,你可以编写代码自动生成UI控件,这些控件将与实体属性相对应。例如,对于`User`实体,你可以生成一个文本框用于显示/编辑`Name`,另一个文本框用于`Email`。这可以通过反射机制实现,遍历...
通过调整属性,我们可以实现各种功能,例如限制输入长度、设置默认文本、开启或关闭自动完成等。以下是一些关键属性: 1. `Text`:这个属性用于获取或设置`TextBox`中显示的文本。 2. `MaxLength`:设置用户可以在...
TextBox控件还有许多其他高级特性,如密码框模式(通过`UseSystemPasswordChar`属性实现)、自动完成(`AutoCompleteMode`和`AutoCompleteSource`属性)和行号显示(`ScrollBars`属性)。对于多行文本框,可以使用`...
1,abkemail.ZIP 简单的email控件(18KB ) 2,abkpop.ZIP 一个简单的POP3控件(5KB)<END><br>3,winpopup.ZIP 允许您的程序通过网络发送和接收 Winpopup 信息(20KB)<END><br>4,autodial.ZIP 自动拨号的...
这通常通过`CoInitializeEx`和`CoCreateInstance`函数完成。 2. **创建邮件对象**:使用Outlook的`Application`对象创建一个新的`MailItem`对象,这代表一封待发送的邮件。 3. **设置邮件属性**:可以调用`...
安装完成后,Jmail的相关库文件会自动添加到开发环境中。 2. **配置过程**:在应用程序中使用Jmail前,需要配置SMTP服务器信息,包括服务器地址、端口、用户名和密码等。这通常通过代码或配置文件实现。 三、Jmail...
- **AutoCompleteTextView**: 提供自动完成建议的 `EditText`。 - **CheckBox**: 一个可以勾选或取消勾选的文本视图。 - **CompoundButton**: 一种特殊的按钮,可以有一个选中状态,如 `CheckBox` 和 `RadioButton`...
VB制作网页自动填表是一个基础的计算机编程教程,主要涉及Visual Basic (VB)的WebBrowser控件和网页交互功能。WebBrowser控件是VB提供的一种组件,它允许开发者在应用程序中嵌入一个浏览器,从而能够加载和显示网页...
9. **API接口**:现代Email系统通常会提供API接口,允许开发者集成邮件服务到其他应用中,如自动化发送邮件、获取邮件信息等。 10. **可扩展性与性能**:随着用户数量的增长,Email系统需要有良好的可扩展性,以...
皮肤组件能完全自动的为您的应用程序添加支持换肤功能,甚至不需要更改您的设计好的Form以及添加一行代码!您 也不再需要花费很多时间来使得自己的应用程序更漂亮。 3 选择皮肤组件产品时需要考虑的几个因素: 3.1...
它可以帮助防止因用户输入错误导致的问题,同时也可以提供自动完成和格式化功能。 3. `type="tel"`:此类型用于电话号码输入,可以支持国际格式,并且可以进行简单的格式验证。 4. `type="date"`:允许用户选择...
在某些情况下,可能需要在JavaScript执行后监听特定的事件,例如表单提交或者页面加载完成。这时,可以在JavaScript中定义一个函数,然后通过`QWebFrame::addToJavaScriptWindowObject()`将该函数注册到全局...
一旦设置完成,程序会定期或者按需自动检查邮件,无需用户手动操作。描述中的“模仿MSN风格的弹出信息提示”意味着这个VB程序在检测到新邮件时,会像MSN Messenger(微软早期的即时通讯软件)那样,通过弹窗通知用户...
在email自动输入的实现中,通过指定separator为"@"符号,来区分邮箱的用户名和域名部分,然后提供了一个预设的域名数组作为输入建议。 对于时间的自动输入,文章中通过编写filter函数来实现对时间的有效控制。...
5、添加代码自动完成功能; 6、添加画线功能。 version : 3.1.0.0 1、修改了选择不同窗体属性窗口不更新的BUG; 2、修改了只能打开一个ucGUIBuilder的功能,现在可以同时启动多个; 3、修复了拖放非ucfrm引起软件...