PHP数据

<?php
  // 数据
  $arr = array(
  array("百度", "http://www.baidu.com/"),
  array("网易", "http://www.163.com/"),
  array("网易新闻", "http://news.163.com/"),    

);
  $l = count($arr);
  // 接收
  $w = $_GET["w"];
  // 循环
  $str = "";
  for( $i=0; $i<$l; $i++){
  if(strpos($arr[$i][0], $w) !== false){
  $str .= "|".$arr[$i][0].",".$arr[$i][1];
      }
}

echo $str;
?>

AJAX.js封装

function get(url, fn){
var xhr;
if( window.XMLHttpRequest ){
xhr = new XMLHttpRequest();
}else{
xhr = new ActiveXObject("Msxml2.XMLHTTP");
}
xhr.open("get", url, true);
xhr.send();
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200){
if( fn ){
fn(xhr.responseText);
}
}
}
}

function post(url, data, fn){
var xhr;
if( window.XMLHttpRequest ){
xhr = new XMLHttpRequest();
}else{
xhr = new ActiveXObject("Msxml2.XMLHTTP");
}
xhr.open("post", url, true);
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xhr.send(data);
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200){
if( fn ){
fn(xhr.responseText);
}
}
}
}

html页面

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style>
#text1{
border: 1px solid gray;
width: 300px;
height: 30px;
}
#div1{
border: 1px solid gray;
background: lightyellow;
width: 302px;
display: none;
}
/*#div1 *{
margin: 0;
padding: 0;
list-style: none;
}*/
</style>
</head>
<body>

<input type="text" id="text1" />
<div id="div1"><ul id="ul1"></ul></div>

</body>
</html>
<script src="ajax.js"></script>
<script>

var ul1 = document.getElementById("ul1");//提示框ul
var ind = 0; // li的下标,每一个li,指输入框的内容所匹配出的结果

text1.onkeyup = function(e){ // 输入框键子按下抬起后,触发的函数
e = e || window.event; // event事件
var code = e.which || e.keyCode; // 指按下了哪个键子
var lis = ul1.getElementsByTagName("li"); // 指当前输入框的内容所对应的所有的li
var len = lis.length; // li的数量
var i = 0; // 循环时的初始值
switch( code ){ // 判断按下了哪个键子
case 13: // 如果按下的是回车
text1.value = lis[ind].innerText; // 将根据下标找到的li的内容,显示在输入框中
break; // 跳出
case 38: // 如果按下了键盘上的方向键上()
ind--; // 下标减1
if(ind==-1)ind=len-1; // 如果下标已经越过了最小值,让下标等于最大值
for( i=0; i<len; i++){ // 循环,将所有的li的背景色清空
lis[i].style.background="";
}
lis[ind].style.background="greenyellow"; // 将当前下标所对应的li的背景色高亮
break;
case 40:
ind++; // 下标加1
if(ind==len)ind=0; // 如果下标已经越过了最大值,让下标等于最小值
for( i=0; i<len; i++){ // 循环,将所有的li的背景色清空
lis[i].style.background="";
}
lis[ind].style.background="greenyellow"; // 将当前下标所对应的li的背景色高亮
break;
default: // 键盘按下了其他的键子时
var w = text1.value; // 获取输入框的值
if( w != "" ){ // 如果输入框中有值
get("chk.php?w="+w, function(str){ // 发起ajax请求,把输入框的指传给php页面
div1.style.display = "block"; // div显示
ul1.innerHTML = ""; // ul节点清空
var arr = str.split("|"); // 响应内容(响应内容指,根据输入框的值,所得到的相关数据),转换为数组,如果不转换输出arr is not defined;

for( var i=1,l=arr.length; i<l; i++ ){ // 对数组进行循环
var li = document.createElement("li"); // 创建li节点
ul1.appendChild(li); // 节点添加到ul中
var col = arr[i].split(","); //每一项包含多个属性,所以也许转为数组
// 显示在li中,replace为高亮显示关键字,eval指转为正则对象
li.innerHTML = col[0].replace(eval("/"+w+"/g"), "<font color=red>"+w+"</font>");
li.onclick = function(){ // 每一个li绑定点击事件
text1.value = this.innerText; // 将当前被点击的li的文本,显示在输入框中
div1.style.display = "none"; // div隐藏
      }
}
if(l>1){ // 如果根据输入框的值,能过获取数据,则将第一项选中
ul1.getElementsByTagName("li")[ind].style.background="greenyellow";
  }
});
}else{
ul1.innerHTML = ""; //内容清空
div1.style.display = "none";//div隐藏
     }
   }

}

</script>

AJAX,PHP,前端简单交互制作输入框效果的更多相关文章

  1. 12个来自 Codrops 的创新交互和动画效果

    产品的用户体验是否被用户所接受,很大一部分取决于交互界面的设计,交互界面设计是整个产品设计中的核心,对于产品品质有着决定性的影响.这里集合了12个来自 Codrops 的创新的界面交互和动画效果,值得 ...

  2. 常用的移动前端webapp交互细节

    #常用的移动前端webapp交互细节 ##select的表现方式 ###PC端 select控件在传统PC桌面已经存在多年,由于在IE6等低版本浏览器容易造成层级错乱,一直被一些UI框架所抛弃,而用d ...

  3. Page Scroll Effects - 简单的页面滚动效果

    Codyhouse 收集了一组页面滚动效果,就是目前大家很常见的用户在浏览网页的时候.一些效果虽然极端,但如果你的目标是创建一个身临其境的用户体验,他们是非常有用的.所有的动画都使用 Velocity ...

  4. jQuery 简单滑动轮播图效果

    一般页面简单轮播图效果用jQuery制作更加简单.我们来看看以下效果是如何来进行制作的. 其html结构下所示: <div id="box">         < ...

  5. unity3d和php后台简单交互--二

    上次我们讨论了u3d和php的简单交互,现在我们接着讨论u3d和php交互,这里我们讨论的是php的后台大家可以延伸为其他语言.在实现的开发中我们很少通过发送字符或者字段到服务器上的,我们一般会请求包 ...

  6. 拖拽系列一、JavaScript实现简单的拖拽效果

        前端拖拽相关应用汇总 在现实生活中就像男孩子牵着(拖着)女朋友的手穿过马路:从马路的一端走到另一端这种场景很常见: 而在前端开发中拖拽效果也算是前端开发中应用最常见.最普遍的特效:其拖拽涉及知 ...

  7. 利用原生js的Dom操作实现简单的ToDoList的效果

    效果如下: 前端及js代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  8. jquery监听事件on写法以及简单的拖拽效果

    引子——关于jquery的某些写法 我先不对监听事件做解释,我们先来看下jquery的一些写法吧!我们最常用的是jquery的css()方法,相信大家都会用! 假如用css设置一个属性,我们写法如下: ...

  9. 本博文将一步步带领你实现抽屉官网的各种功能:包括登陆、注册、发送邮箱验证码、登陆验证码、页面登陆验证、发布文章、上传图片、form验证、点赞、评论、文章分页处理以及基于tronado的后端和ajax的前端数据处理。

    本博文将一步步带领你实现抽屉官网的各种功能:包括登陆.注册.发送邮箱验证码.登陆验证码.页面登陆验证.发布文章.上传图片.form验证.点赞.评论.文章分页处理以及基于tronado的后端和ajax的 ...

随机推荐

  1. 纯css隐藏移动端滚动条解决方案(ios上流畅滑动)

    纯css隐藏移动端滚动条解决方案(ios上流畅滑动) html代码展示(直接复制代码保存至本地文件运行即可): <!DOCTYPE html> <html lang="en ...

  2. oracle pl/sql 分页

    一.无返回值的存储过程 古人云:欲速则不达,为了让大家伙比较容易接受分页过程编写,我还是从简单到复杂,循序渐进的给大家讲解.首先是掌握最简单的存储过程,无返回值的存储过程. 案例:现有一张表book, ...

  3. [js高手之路] html5 canvas系列教程 - arc绘制曲线图形(曲线,弧线,圆形)

    绘制曲线,经常会用到路径的知识,如果你对路径有疑问,可以参考我的这篇文章[js高手之路] html5 canvas系列教程 - 开始路径beginPath与关闭路径closePath详解. arc:画 ...

  4. servlet文件上传2——复合表单提交(数据获取和文件上传)

    上传文件时表单enctype属性必须要更改为<enctype='multipart/form-data'>:采用post提交表单,元素需要有name属性: 利用第三方jar包(common ...

  5. 翻译连载 | 第 10 章:异步的函数式(上)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇

    原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTM ...

  6. 在JavaScript中使用json.js:使得js数组转为JSON编码

    在json的官网中下载json.js,然后在script中引入,以使用json.js提供的两个关键方法. 1.数组对象.toJSONString() 这个方法将返回一个JSON编码格式的字符串,用来表 ...

  7. mybatis错误——java.io.IOException: Could not find resource com/xxx/xxxMapper.xml

    在学习Mybatis的时候,参考网上的教程进行简单demo的搭建,配置的没有问题,然后出现了下面的错误! Exception in thread "main" java.lang. ...

  8. hive自定义UDF

    udf udaf udtf 使用方式 hiverc文件 1.jar包放到安装日录下或者指定目录下 2.${HIVE_HOME}/bin目录下有个.hiverc文件,它是隐藏文件. 3.把初始化语句加载 ...

  9. Clojure——学习迷宫生成

    背景 初学clojure,想着看一些算法来熟悉clojure语法及相关算法实现. 找到一个各种语言生成迷宫的网站:http://rosettacode.org/wiki/Maze_generation ...

  10. tcpip第三章

    1,ip协议不可靠.无连接特性介绍 不可靠:计算机A往计算机B发送数据报1,若途径的路由器缓存已满,或者ttl(time to live 生存周期)到了,则路由器直接丢弃数据包1,并产生icmp数据包 ...