var oInputField ,oPopDiv , oColorsUl,aColors;
//初始化变量
function initVars(modelId,divId,ulId){
oInputField = document.getElementById(modelId);
oPopDiv = document.getElementById(divId);
oColorsUl = document.getElementById(ulId);
} //查机种、料号 自动补全
function findModel(div_id,ul_id,model_id,form_id,p_cbo_id){
var keyCode = event.keyCode;
var arrayStr ='';
initVars(model_id,div_id,ul_id);
var aResult = new Array(); //用于存放匹配结果
var params = document.getElementById(model_id).value; //序列化表格数据"myForm1"为表格的id
if((keyCode >= 65 && keyCode <= 90) || (keyCode >= 48 && keyCode <= 57) || keyCode == 8 || keyCode == 46){//要过滤的键位 字母、数字、删除键
if(oInputField.value.length >= 2){//超过两位开始查
$.ajax({
type:'post',
data:{'modelName':params},
dataType:'json',
url:'queryPart.action',
success:function(data) {
if(data == "error" || data == null || data == ""){
clearModel();
return;
}
document.getElementById(div_id).style.display = 'block';
$.each(data,function(index,element){
arrayStr +=element.model_name+','+element.part_no+','+element.route_id+'$';
});
aResult = arrayStr.split("$");
setModel(model_id,div_id,aResult,p_cbo_id);
}
});
}else{
clearModel();//无输入时清除提示框
}
}
}
//清除提示内容
function clearModel(){
for(var i = oColorsUl.childNodes.length - 1 ; i >= 0 ; i-- )
oColorsUl.removeChild(oColorsUl.childNodes[i]);
oPopDiv.className = "hide";
}
//设置自动补全数据
function setModel(modelId,divId,the_models,p_cbo_id){
//显示提示框、传入的参数即为匹配出来的结果组成的数组
clearModel();//每输入一个字母就先清除原先的提示、再继续
oPopDiv.className = "show";
var oLi; for(var i = 0 ; i < the_models.length ; i++ ){
//将匹配的提示结果逐一显示给用户
oLi = document.createElement("li");
oColorsUl.appendChild(oLi);
oLi.appendChild(document.createTextNode(the_models[i])); oLi.onmouseover = function(){
this.className = "mouseOver" ; //鼠标指针经过时高亮
}
oLi.onmouseout = function(){
this.className = "mouseOut" ; //鼠标指针离开时恢复原样
}
oLi.onclick = function(){
//用户单击某个匹配项时、设置输入框为该项的值
oInputField.value = this.firstChild.nodeValue;
clearModel();//同时清除提示框
document.getElementById(divId).style.display = 'none';
getProcessNames(modelId,p_cbo_id);
}
}
}

JSP代码:

<s:textfield title="请输入机种关键字,至少两位"  name="modelName" size="30" id="model_id" onkeyup="findModel('popup_wip','model_colors_ul_wip',this.id,'queryWIPForm','p_cbo_id_wip');" cssClass="required"></s:textfield>
<div id="popup_wip">
<ul id="model_colors_ul_wip"></ul>
</div>

CSS样式代码

<style>
<!--
#popup_wip{
/*提示框div块的样式*/
position: absolute; width: 200px;
color: #004a7e; font-size: 12px;
font-family: Arial,Helvetica,sans-serif;
left: 43px; top: 28px;
background-color: #E6EAE9;
overflow:auto;
height: 50px;
display: none;
}
#popup_wip.show{
/*显示提示框的边框*/
border: 1px solid #004a7e;
}
#popup_wip.hide{
/*隐藏提示框的边框*/
border: none;
}
/*提示框的样式风格*/
ul{
list-style: none;
margin: 0px; padding: 0px;
}
li.mouseOver{
background-color: #004a7e;
color: #FFFFFF;
}
li.mouseOut{
background-color: #FFFFFF;
color: #004a7e;
}
-->
</style>

Action代码:

private List<Map<String,Object>> listParts;
public void queryPart(){
IQueryDAO query = new IQueryDAOImpl();
listPartMaps = query.queryPart(modelName.toUpperCase());
JSONArray jsonArray = JSONArray.fromObject(listPartMaps);
try {
ServletActionContext.getResponse().getWriter().print(jsonArray);
} catch (IOException e) {
e.printStackTrace();
}
}

DAO代码:

    public List<Map<String,Object>> queryPart(String modelName) {
db = new DBManager();
String sql ="select part_id,model_name,part_no,route_id from sajet.sys_part where upper(model_name) like upper(?) and enabled ='Y' ORDER BY MODEL_NAME";
List<Map<String,Object>> listPart = new ArrayList<Map<String,Object>>();
try {
connection = db.GetOraConnection();
pstmt = connection.prepareStatement(sql);
pstmt.setString(1, modelName+"%");
rs = pstmt.executeQuery();
while(rs.next()){
Map<String,Object> map = new HashMap<String,Object>();
map.put("part_id", rs.getInt("part_id"));
map.put("model_name", rs.getString("model_name"));
map.put("route_id", rs.getInt("route_id"));
map.put("part_no", rs.getString("part_no"));
listPart.add(map);
}
} catch (SQLException e) {
log.error("查询机种时出错:"+e.getMessage());
e.printStackTrace();
}finally{
db.closeConnection(connection, rs, pstmt);
}
return listPart;
}

js自动补全实例的更多相关文章

  1. js自动补全空白列(即缺少td的列)

    //自动补全空白列 var rows = document.getElementById("gridTable").rows; //行对象 var allcells = rows[ ...

  2. js自动补全

    <!doctype html> <html> <style> body { margin-left: 0px; margin-top: 0px; margin-ri ...

  3. 原创js自动补全---auotocomplete

    if ($("input.autocomplete_input").length > 0) { $("input.autocomplete_input") ...

  4. Visual Studio Code使用typings拓展自动补全功能

    转自:http://blog.csdn.net/liyijun4114/article/details/51658087 参考来源: 官方介绍: https://code.visualstudio.c ...

  5. js邮箱自动补全

    邮箱自动补全js和jQuery html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &q ...

  6. jquery input 搜索自动补全、typeahead.js

    最近做个一个功能需要用到自动补全,然后在网上找了很久,踩了各种的坑 最后用typeahead.js这个插件,经过自己的测试完美实现 使用方法:在页面中引入jquery.jquery.typeahead ...

  7. jQuery搜索框自动补全功能插件实现-autocomplete.js

    最近用nodeclub实现股票的输入关键字自动补全股票信息进行搜索功能,原先用jQuery-ui,结果jQuery-ui库太大,所以考虑用其他插件,最终选择使用autocomplete.js,控件简单 ...

  8. jQuery AutoComplete 自动补全

    jQuery.AutoComplete是一个基于jQuery的自动补全插件.借助于jQuery优秀的跨浏览器特性,可以兼容Chrome/IE/Firefox/Opera/Safari等多种浏览器. 特 ...

  9. jquery.autocomplete自动补全功能

    项目实例: 一:js //SupplierAutoComplete.js $().ready(function () { $("#txtSupplier").autocomplet ...

随机推荐

  1. .NETCore Sqlserver下对Dapper的扩展支持

    这里我们自定义一个IServiceCollection的扩展,例如下面我的扩展 services.AddDapperContext(dapperoptions => { dapperoption ...

  2. 【AtCoder】AGC011 E - Increasing Numbers

    题解 题是真的好,我是真的不会做 智商本还是要多开啊QwQ 我们发现一个非下降的数字一定可以用不超过九个1111111111...1111表示 那么我们可以得到这样的一个式子,假如我们用了k个数,那么 ...

  3. USACO 5.4 Character Recognition

    Character Recognition This problem requires you to write a program that performs character recogniti ...

  4. vue 单向数据流 & 双向绑定

    在react中是单向数据绑定,而在vue中的特色是双向数据绑定.但是其实就我个人的理解是: 其实无论是vue还是react其实还是提倡单向数据流去管理状态,这一点在vuex和redux状态管理器上体现 ...

  5. UVA - 11995 - I Can Guess the Data Structure! STL 模拟

    There is a bag-like data structure, supporting two operations: 1 x Throw an element x into the bag. ...

  6. 浅谈Comparable与Comparator的区别

    平时进行自定义排序一直使用实现Comparable接口,一段时间后操作的时候居然发现有了个Comparator接口 上网差了些资料,总结笔记一下. 基本原理就是比较,底层是二叉树 比如是3,6,5,1 ...

  7. JAVAEE——SSH项目实战05:用户注册、登陆校验拦截器、员工拜访客户功能和MD5加密

    作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7170519.html 一.用户注册   显示错误信息到页面上的另一种方法: public ...

  8. ceph部署过程中的错误

    ceph版本-jewel 用ssd盘来journal ,格式分区权限问题 [ceph-node2][WARNIN] ceph_disk.main.FilesystemTypeError: Cannot ...

  9. 「HNOI2018」毒瘤

    「HNOI2018」毒瘤 解题思路 先考虑只有一棵树的情况,经典独立集计数. \[ dp[u][0]=\prod (dp[v][0]+dp[v][1]) \\ dp[u][1]=\prod dp[v] ...

  10. 20162303石亚鑫 第十二周hash补充博客

    要求 利用除留余数法为下列关键字集合的存储设计hash函数,并画出分别用开放寻址法和拉链法解决冲突得到的空间存储状态(散列因子取0.75) 关键字集合:85,75,57,60,65,(你的8位学号相加 ...