近期做项目的时候需要用到联想输入,类似于百度的输入,当用户输入非空,需要提示出所有可能的选项(这里是查询数据库),用户可以使用联想输入进行快速选择输入,根据经验及网上资料,最后实现了该功能,JS如下:
/**
* 联想输入框的实现
*
* @param objid 页面输入框对应的obj标签的Id
* @param flag 联想输入对应的操作,数字,与action中实现对应
*/
function inputThinking(objid, flag) {
// 输入框父节点Id
var pid = objid + "_input";
//输入框的Id
var inputId = objid + "_input_value";
// 获取输入框宽度,根据宽度自适应
var width = $("#" + pid).css("width");
if(width && width.indexOf('px') > 0) {
width = width.substring(0, width.indexOf('px')) - 2;
} else {
width = 158;
}
// 定义联想输入页面HTML, 定义输入框及联想输入页面的状态,状态1表示焦点状态,状态0表示非焦点状态
var tipHTML = "<div id='thinking' style='background-color:white;position:fixed;z-index:999999;border:1px solid #CDE4EF; width:" + width + "px;overflow:hidden;overflow:hidden;display:none;background-image: theme/default/imagesmember_right1.png'><li> </li></div><input type='hidden' id='inputId' value='" + inputId + "'><input type='hidden' id='status' value='1'><input type='hidden' id='thinking_status' value='0'><style>li.sel{background:#4d77bb;color:white;}li{font-size:14px;height:18px;overflow:hidden;}</style>"
/********** 将联想输入页面嵌入原始页面 **********/
$("#" + inputId).parent().append(tipHTML);
/********** 绑定输入框事件 **********/
// 输入框内容修改事件
$("#" + inputId).bind("keyup", function(e) {
if (e.keyCode == 38) {
// 向上
next(false);
} else if(e.keyCode == 40) {
// 向下
next(true);
} else {
showThinking(inputId, flag);
}
});
// 单击事件,将输入框的状态置为1
$("#" + inputId).bind("click", function() {
// 设置输入框的状态为1
$("#status").val(1);
showThinking(inputId, flag);
});
// 单击事件,将输入框的状态置为1
$("#" + inputId).bind("focus", function() {
// 设置输入框的状态为1
$("#status").val(1);
showThinking(inputId, flag);
});
// 失去焦点事件,将输入框的状态置为0
$("#" + inputId).bind("focusout", function() {
// 设置输入框的状态为0
$("#status").val(0);
// 当联想输入页面和输入框的状态均为0时隐藏联想输入页面
if($("#thinking_status").val() && $("#thinking_status").val() == 0) {
$("#thinking").css("display", "none");
}
});
/********** 绑定联想输入页面事件 **********/
// 鼠标移动事件
$("#thinking").bind("mousemove", function() {
// 设置联想输入页面的状态为1
$("#thinking_status").val(1);
});
// 鼠标移出事件
$("#thinking").bind("mouseout", function() {
// 设置联想输入页面的状态为0
$("#thinking_status").val(0);
// 当联想输入页面和输入框的状态均为2时隐藏联想输入页面
if($("#status").val() && $("#status").val() == 0) {
$("#thinking").css("display", "none");
}
});
/********** end **********/
}
/**
* 根据状态刷新数据,并显示联想输入框
*
* @param inputId 页面input输入框对应的Id
* @param flag 联想输入对应的操作,数字,与action中实现对应
*/
function showThinking(inputId, flag) {
var value = $.trim($("#" + inputId).val());
// 只有输入框非空的时候才调用输入联想
if(value && value != null && value != '') {
// 发送ajax初始化输入联想页面
$.ajax({
type: "POST",
async: false,
// 调用的action定义
url: 对应的请求地址,
data: 请求参数,
// 回调函数
success: function(html) {
// 返回的如果是异常则跳过
if(没有抛出异常或者成功返回结果判断) {
$("#thinking").html(html);
// 显示联想输入页面
$("#thinking").css("display", "block");
}
},
error: function(msg) {
alert(msg);
}
});
} else {
$("#thinking").html("");
}
}
function next(flag) {
var obj = get($("#thinking li.sel"), 0);
var next = null;
if(obj) {
next = get(flag? $(obj).next("li"): $(obj).prev("li"), 0);
} else {
next = flag? $("#thinking li").first(): $("#thinking li").last();
}
if(next) {
if(obj) {
$(obj).removeClass("sel");
}
$(next).addClass("sel");
}
}
function get(array, index) {
if(array.length && array.length > index) {
return array[index];
} else {
return null;
}
}
/**
* 将选择的数据填充到输入框
*
* @param name 显示的数据内容
*/
function selectThisEnt(name) {
$("#" + $("#inputId").val()).val(name);
$("#" + $("#inputId").val()).change(); // 触发change事件,更新输入联想提示内容
$("#thinking").css('display', 'none');
}
/**
* 将选择的节点数据填充到输入框
*
* @param obj 选择的节点
*/
function selectThinking(obj) {
$("#" + $("#inputId").val()).val($(obj).text());
$("#" + $("#inputId").val()).change(); // 触发change事件,更新输入联想提示内容
$("#thinking").css('display', 'none');
}
注:该实现需要jquery支持,如需使用,还需修改对应的dom对象的id属性与当前对应
分享到:
相关推荐
效果类似百度搜索中,键入关键字联想出的很多搜索热点。
综上所述,"js的多用户输入联想提示框"是一个涉及前端JavaScript、CSS和可能的后端服务器交互的复杂功能,需要综合运用多种技术来实现。通过合理的设计和优化,我们可以创建出高效、易用的多用户输入体验。
总的来说,这个项目涉及了前后端的紧密协作,利用PHP、MySQL和jQuery实现了动态的联想输入功能,提高了用户在网页上的交互体验。在实际开发中,还需要考虑性能优化、错误处理、安全性等多个方面,确保功能的稳定和...
本文将详细讨论如何使用JS实现虚拟键盘,并特别关注其支持中文拼音输入的功能。 1. **JS虚拟键盘基础** - **JavaScript(JS)**:JS是一种广泛应用于Web开发的脚本语言,用于实现客户端的动态交互效果。它可以直接...
本示例中的“ajax联想输入功能”是指利用Ajax技术实现的一种常见交互功能——自动完成功能,常见于搜索引擎、输入框等,能根据用户输入的内容动态给出建议,提高用户体验。 自动完成功能的核心在于实时获取用户输入...
2. **前端技术**:在前端,我们可以使用HTML5的`<input>`元素创建搜索输入框,并结合JavaScript(如jQuery)或现代前端框架(如React、Vue.js)来监听用户的输入事件。当用户输入变化时,触发AJAX请求,向后端发送...
实现可联想文本框的核心是实时查询和匹配算法,可以基于用户输入的前缀、关键词或者其他规则进行匹配。通常,这需要结合后端服务实时通信,以获取最新的匹配结果。前端则负责展示这些结果,一般采用下拉列表的形式,...
在C#中实现仿Google联想输入,首先需要一个后台服务来处理请求。这个服务通常是一个ASP.NET Web API或ASP.NET MVC控制器,它接收来自前端的输入关键字,并基于这些关键字从数据库或其他数据源中检索可能的匹配项。这...
在ASP中实现“Text”的联想输入功能,主要是为了提升用户体验,使得用户在输入时能够得到相关的建议,加快数据录入的速度并减少错误。这种功能常见于搜索框、表单输入等场景,通常依赖于后台数据库的支持。 实现ASP...
在IT行业中,Ext JS是一个广泛使用的JavaScript库,用于构建富客户端Web应用程序。它提供了一套完整的组件模型,其中包括comboBox(下拉框)组件,用于创建可搜索、可选择的列表。本篇我们将深入探讨“Ext comboBox...
本项目“HTML5+JavaScript+CSS 商城(模拟联想)购物系统”充分利用这三种技术,打造了一个功能完善的模拟购物平台,实现了动态信息浏览、商品检索、用户注册登录以及数据的增删改等功能。 一、HTML5:新一代的网页...
在IT领域,Google搜索联想是一项常见且实用的功能,它能够帮助用户在输入搜索关键词时,自动预测并显示可能的相关搜索词。这个功能极大提升了搜索效率,增强了用户体验。本实例代码将教你如何实现类似Google搜索联想...
在压缩包中的文件名"仿百度搜索框联想词提示js代码"可能包含了一个基本的JavaScript实现,它可能包含了事件监听、Ajax请求和数据显示的逻辑。而"ajax访问数据库仿照联想词"可能是后端接口的实现,包括了数据库查询和...
"jquery实现搜索及时联想"是指利用jQuery来构建一个功能,当用户在搜索框输入内容时,系统能即时显示出与输入相关的联想词或建议,提升用户体验,加快查找速度。 实现这一功能的关键技术包括以下几个方面: 1. **...
综上所述,“css+html+js联想查询”项目展示了前端开发中的核心技能,HTML提供结构,CSS负责样式,而JavaScript实现了动态交互和业务逻辑。这种组合不仅在本项目中得到应用,在众多现代网页和Web应用中都扮演着至关...
如果文件包含了一个`模仿百度搜索框.js`,那么这个文件就是核心的JavaScript实现代码,可能包括事件绑定、异步请求和DOM操作等功能。 总之,实现百度搜索框联想功能涉及到的关键技术包括JavaScript事件监听、异步...
Java 和 JavaScript 结合实现下拉框提示搜索功能是前端开发中的常见需求,它极大地提升了用户交互体验,使得用户能够快速找到所需的信息。这种功能广泛应用于各种网页表单、搜索引擎、推荐系统等。以下是对这个主题...
【JS百度搜索框联想词提示代码】是一种使用JavaScript编写的前端技术实现,它主要用于创建一个类似于百度搜索引擎的自动联想提示功能。在用户输入关键词时,该代码能够实时地从预设的数据源中匹配并显示相关的搜索...
本文将详细介绍如何使用JavaScript实现国家或地区名称的联想和自动补全功能。 首先,我们需要一个包含所有国家或地区名称的数组。这个数组可以是预先定义好的,也可以从API动态获取。例如: ```javascript var ...
总的来说,"联想输入人员名称"是通过结合前端的异步处理和后端的高效查询实现的,它提升了用户输入人名的效率和准确性,是现代Web应用中不可或缺的一个功能点。在设计和实现这样的系统时,需要考虑性能、用户体验...