邮件的自动补全功能用的是jquery-ui.js
抄送人员的自动补全功能,即邮件的自动补全功能,来自t_User表中的Email这个字段,比如输入zml,点击回车,就会自动出现zml@govaze.com
或者根本就不需要点击回车
前台代码
<ext:TextBox ID="Text3" runat="server" Label="实际参与人员" EmptyText="输入至少三个字符(自动补全)" MinLength="3" Required="true" ShowRedStar="true"/>
<ext:TextBox ID="Text102" Label="抄送人员" EmptyText="输入至少三个字符(自动补全)" runat="server" />
js中的对应的代码
<script src="../res/js/jquery.min.js" type="text/javascript"/>
<script src="../res/autocomplete/jquery-ui.js" type="text/javascript"/>
<script type="text/javascript">
var Text102ID = '<%= Text102.ClientID %>';
var Text3ID = '<%= Text3.ClientID %>';
// 将字符串 val 以逗号空格作为分隔符,分隔成数组
function split(val) {
return val.split(/,s*/);
}
// 取得以逗号空格为分隔符的最后一个单词
// 比如,输入为 "C++, C#, JavaScript" 则输入出 "JavaScript"
function extractLast(term) {
return split(term).pop();
}
邮件的自动补全功能
function bindAutocompleteEmail(ClientID, cache) {
$('#' + ClientID + ' input').bind("keydown", function (event) {
// 通过 Tab 选择一项时,不会使当前文本框失去焦点
if (event.keyCode === $.ui.keyCode.TAB &&
$(this).data("autocomplete").menu.active) {
event.preventDefault();
}
}).autocomplete({
minLength: 3,
autoFocus: true,
source: function (request, response) {
// 将最后一个单词作为输入值,从列表中过滤出备选项
var term = extractLast(request.term);
if (term.length < 3) {
return;
}
if (term in cache) {
response(cache[term]);
return;
}
else {
request.term = term;
}
request.userName = F('<%= userName.ClientID %>').getValue();
$.getJSON("getUserEmailHandler.ashx", request, function (data, status, xhr) {
cache[term] = data;
response(data);
});
},
focus: function () {
// 阻止某一项获得焦点时,更新文本框的值
return false;
},
change: function (event, ui) {
var terms = split(this.value);
// 移除用户正在输入项
terms.pop();
terms.push("");
this.value = terms.join(", ");
},
select: function (event, ui) {
var terms = split(this.value);
// 移除用户正在输入项
terms.pop();
// 添加用户选择的项
terms.push(ui.item.value);
// 添加占位符,确保字符串的最后以逗号空格结束
terms.push("");
this.value = terms.join(", ");
return false;
}
});
}
人员姓名的自动补全功能
function bindAutocomplete(id, cache) {
$('#' + id + ' input').autocomplete({
minLength: 3,
autoFocus: true,
mustMatch: true,
source: function (request, response) {
var term = request.term;
if (term in cache) {
response(cache[term]);
F(id).setValue(cache[term][0]);
return;
}
request.userName = F('<%= userName.ClientID %>').getValue();
$.getJSON("getUserAll2Handler.ashx", request, function (data, status, xhr) {
cache[term] = data;
response(data);
if (data) {
F(id).setValue(data[0]);
}
else {
F(id).setValue("");
}
});
}
});
}
F.ready(function () {
var cache1 = {};
var cache2 = {};
bindAutocompleteEmail(Text102ID, cache1);//调用邮件的自动补全功能
bindAutocomplete(Text3ID, cache2);//人员姓名的自动补全功能
});
getUserEmailHandler.ashx在自动补全邮件的代码中还需要此文件
a_User_dis_EmailList,调用了此存储过程,执行了最后一个分支,只有最后一个分支里面出现的数据,才会在邮件的输入框中出现
实际参与人员用到的.ashx文件