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. GridLayout 计算器

    <?xml version="1.0" encoding="utf-8"?> <GridLayout xmlns:android=" ...

  2. Spark(五)Spark任务提交方式和执行流程

    一.Spark中的基本概念 (1)Application:表示你的应用程序 (2)Driver:表示main()函数,创建SparkContext.由SparkContext负责与ClusterMan ...

  3. 最短路算法 -- SPFA模板

    一.算法步骤 建立一个队列,初始时队列里只有起始点,再建立一个数组记录起始点到所有点的最短路径(该数组的初始值要赋为极大值,该点到它本身的路径赋为0,下面的模板中该数组为dist[]).然后执行松弛操 ...

  4. git更新到仓库

    记录每次更新到仓库 现在我们手上已经有了一个真实项目的 Git 仓库,并从这个仓库中取出了所有文件的工作拷贝.接下来,对这些文件作些修改,在完成了一个阶段的目标之后,提交本次更新到仓库. 请记住,工作 ...

  5. 深度学习基础系列(四)| 理解softmax函数

    深度学习最终目的表现为解决分类或回归问题.在现实应用中,输出层我们大多采用softmax或sigmoid函数来输出分类概率值,其中二元分类可以应用sigmoid函数. 而在多元分类的问题中,我们默认采 ...

  6. Django-url反向解析与csrf-token设置

    url反向解析 在使用Django 项目时,一个常见的需求是获得URL 的最终形式,以用于嵌入到生成的内容中(视图中和显示给用户的URL等)或者用于处理服务器端的导航(重定向等). 人们强烈希望不要硬 ...

  7. Winform 串口通讯之读卡器

    老板给我的第一个硬件就是一个读卡器, 说让我做一下试试,于是从网上查了查就写了出来,相当的简单. 但是后来还有一个地磅的串口通讯,我整整搞了一天. 在窗体类的构造函数中写入 Form.CheckFor ...

  8. Where should we fork this repository?

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 我们应该在哪里分叉这个存储库? Where should we fork this re ...

  9. String StringBuffer stringbuilder 区别

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 字符串类 ,长度不可变. 字符串缓存器类, 长度可变, 线程安全, 字符串构造器类,长度 ...

  10. Java并发(十七):ConcurrentHashMap

    先做总结: 1.HashMap HashTable ConcurrentHashMap HashMap:线程不安全 HashTable:线程安全,每个方法都加了 synchronized 修饰.类似 ...