热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

php+ajax仿google下拉框代码二-PHP源码

ec(2);CREATETABLE`suggest`( `id`int(10)unsignedNOTNULLauto_increment, `keyword`varchar(50)NOTNULL, `num`int(10)unsignedNOTNULL, PRIMARYKEY (`id`)

CREATE TABLE `suggest` (
`id` int(10) unsigned NOT NULL auto_increment,
`keyword` varchar(50) NOT NULL,
`num` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gb2312 AUTO_INCREMENT=59 ;

/*
****************************
*** http://www.hansir.cn ***
****************************
*/
String.prototype.ltrim = function(){
return this.replace(/^s*(.+?)$/,'$1');
}
//这里引用prototype的五个方法
function $(){return document.getElementById(arguments[0]);}
Object.extend = function(destination, source){
for(property in source) destination[property] = source[property];
return destination;
}
function $A(iterable) {
var results = [];
for (var i = 0; i return results;
}
Function.prototype.bindAsEventListener = function(object) {
var __method = this;
return function(event) {
return __method.call(object, event || window.event);
}
}
Function.prototype.bind = function() {
var __method = this, args = $A(arguments), object = args.shift();
return function() {
return __method.apply(object, args.concat($A(arguments)));
}
}
var hansir = {
url: 'http://www.hansir.cn'
}
hansir.AjAx = function(){this.initialize.apply(this, arguments);}
hansir.AjAx.prototype = {
initialize: function(complete, method, url){
this.complete = complete;
this.method = method || 'post';
this.url = url;
if (this.method == 'get') this.url += (this.url.match(/?/) ? '&' : '?');
},
xmlHttp: function(){
var xmlHttp;
if(window.XMLHttpRequest) xmlHttp = new XMLHttpRequest();
else if(window.ActiveXObject)
try{
xmlHttp = new ActiveXObject('Msxml2.XMLHTTP');
}catch(errr){
xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');
}
return xmlHttp;
},
request: function(parameters){
var xmlHttp = this.xmlHttp();
var send_val = null;
this.method=='get' ? this.url += parameters : send_val = parameters;
xmlHttp.open(this.method, this.url, true);
xmlHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded; charset=utf-8');
xmlHttp.Onreadystatechange= this.ready_handler.bind(this, xmlHttp);
xmlHttp.send(send_val);
},
ready_handler: function(xmlHttp){
if(xmlHttp.readyState == 4){
if(this.success(xmlHttp)){
this.complete.load_data(xmlHttp);
}
}
},
success: function(xmlHttp){return xmlHttp.status == 0 || xmlHttp.status >= 200 && xmlHttp.status <300}
}
hansir.TextSuggest = function(){this.initialize.apply(this, arguments);}
hansir.TextSuggest.prototype = {
initialize: function(){},
add_suggest: function(inp, url, method, defer, defer2){
var inp = $(inp);
inp.defer = defer || null;
inp.defer2 = defer2 || 200;
var sw = inp.offsetWidth, sh = inp.offsetHeight;
inp.suggest_list = this.create_list(sw, sh);
inp.suggest_list.par = inp;
inp.xmlHttp = new hansir.AjAx(inp.suggest_list, method, url);
Object.extend(inp, {
requesting : false,
last_result : true,
previous_value : null,
last_value : null,
kt : null,
rt : null,
load_event: function(){
if(this.addEventListener){
this.addEventListener('input', this.keyup_handler.bindAsEventListener(this),false);
}else if(this.attachEvent){
this.attachEvent('onkeyup', this.keyup_handler.bindAsEventListener(this));
}
},
keyup_handler:function(e){
var intKey;
window.event ? intKey = event.keyCode : intKey = e.which;
if(intKey == 38 || intKey == 40 || intKey == 13 || intKey == 37) return;
if(this.requesting) return;
var val = this.value.ltrim();
this.last_value = val;
if(val == this.previous_value) return;
if(val==''){
this.previous_value = '';
this.last_value='';
this.suggest_list.hidden();
this.suggest_list.clear_data();
return;
}
if(new RegExp('^'+this.last_result,'i').test(val)) return;
this.last_result = true;
this.previous_value = val;
if(this.kt) clearTimeout(this.kt);
this.defer?this.kt = setTimeout(this.send_request.bind(this), this.defer):this.send_request();
},
onblur: function(){
setTimeout(this.suggest_list.hidden.bind(this.suggest_list), 100);
},
onkeydown: function(e){ // 上下、回车键事件
if(!this.suggest_list.rows.length) return;
var intKey;
window.event ? intKey = event.keyCode : intKey = e.which;
switch(intKey){
case 38:
if(this.suggest_list.style.visibility=='hidden'){
this.suggest_list.visible();
return;
}
var val = this.suggest_list.select_index(1);
val?this.value=val : this.value = this.last_value;
break;
case 40:
if(this.suggest_list.style.visibility=='hidden'){
this.suggest_list.visible();
return;
}
var val=this.suggest_list.select_index(0);
val?this.value=val : this.value = this.last_value;
break;
case 13:
if(this.suggest_list.cur_tr!=-1){
this.suggest_list.hidden();
break;
}
case 39:
this.suggest_list.hidden();
this.keyup_handler('o');
}
},
send_request: function(){ // 请求数据
this.requesting = true;
var val = this.value;
var parameters = 'keyword=' + val.ltrim();
this.xmlHttp.request(parameters);
this.start_hidden_time();
},
start_hidden_time: function(){
if(this.rt) clearTimeout(this.rt);
this.rt = setTimeout(this.list_hidden.bind(this), this.defer2);
},
list_hidden: function(){
if(this.requesting) this.suggest_list.hidden();
}
});
inp.load_event();
},
create_list: function(w, h){ //创建列表
var table = document.createElement('table');
table.cellSpacing = 0;
document.body.appendChild(table);
table.className = 'tab_suggest';
table.style.width = w + 'px';
table.parh = h-1;

Object.extend(table,{
cur_tr: -1,
set_pos: function(){ // 下垃框位置
var x=0, y=0, inp = this.par;
while(inp != null){x += inp.offsetLeft;y += inp.offsetTop;inp = inp.offsetParent;}
inp = null;
table.style.left = x + 'px';
table.style.top = y+this.parh+ 'px';
},
add: function(str, num){
var n=0;
this.rows.length ? n=this.rows.length : n = 0;
var tr = this.insertRow(n);
var th = document.createElement('th');
var td = document.createElement('td');
th.innerHTML = str, td.innerHTML = num;
tr.appendChild(th), tr.appendChild(td);
tr.num = this.rows.length-1;
tr.par = this;
tr.Onmouseover= function(){
var par = this.par;
if(par.cur_tr!=-1 && par.cur_tr!=this.num){
par.rows[par.cur_tr].className='';
this.className = 'cur';
par.cur_tr = this.num;
}else{
this.className = 'cur';
par.cur_tr = this.num;
}
}
tr.Onclick= function(){
var par = this.par.par;
par.value = this.cells[0].innerHTML;
}
tr = null, th = null, td = null;
},
load_data: function(xmlHttp){ // 加载列表
var inp = this.par;
if(inp.previous_value != inp.value){
inp.requesting = false;
this.clear_data();
inp.keyup_handler('o');
return;
}
var arr = xmlHttp.responseText;
if(arr.ltrim() == 'null'){
inp.last_result = inp.value;
inp.requesting = false;
inp.suggest_list.hidden();
this.clear_data();
return;
}
var cur_data = eval(arr);
this.clear_data();
for(var i=0; i this.cur_tr = -1;
this.visible();
inp.requesting = false;
},
clear_data: function(){while(this.rows.length)this.deleteRow(this.rows[0])}, // 清空列表
select_index: function(n){ // 移动选项
if(n){
if(this.cur_tr==0){
this.rows[0].className = '';
this.cur_tr = -1;
return false;
}else{
this.cur_tr==-1?this.cur_tr=this.rows.length : this.rows[this.cur_tr].className = '';
this.cur_tr = this.cur_tr-1;
this.rows[this.cur_tr].className = 'cur';
return this.rows[this.cur_tr].cells[0].innerHTML;
}
}else{
if(this.cur_tr == (this.rows.length-1)){
this.rows[this.cur_tr].className= '';
this.cur_tr = -1;
return false;
}else{
if(this.cur_tr!=-1)this.rows[this.cur_tr].className = '';
this.cur_tr = this.cur_tr+1;
this.rows[this.cur_tr].className = 'cur';
return this.rows[this.cur_tr].cells[0].innerHTML;
}
}
},
hidden: function(){this.style.visibility = 'hidden';}, // 隐
visible: function(){this.set_pos(); this.style.visibility = 'visible';} // 显
});
return table;
}
}

推荐阅读
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
author-avatar
赵_文赞
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有