Suggession(对话框组件)

Google =>jQuery suggestion plugin

交互

1,input
2,用户输入字母/汉字
3,根据输入给出下拉提示
4,键盘或鼠标点击
5,(可选)是否帮他提交
网站例子

思路

1,正交原则,写出html

<div class="suggession">
<div>
  <input type="text"></input>
</div>
<div>
  <ul class="alt">
    <li>1</li>
    <li>2</li>
  </ul>
 </div>
</div>

2,css样式

  *{padding:0;margin:0;box-sizing:border-box ;}
  ul,li{list-style:none;}
  body{
     text-align:center;
  }
 .suggession{
     display:inline-block;
    text-align:left;
 }

3,JS

1)选中状态,如下图
默认选中要不要把数据显示出来?
解决:
如果数据量大,focus的时候不显示;如果数据量小,focus的时候可以显示。
数据规模小,用户一点进来,显示数据,这样用户可以照着写


图片.png

2)监听文字变动
a,注意一个常错误的点:
监听change事件,改变输入框value,只有当输入框失去焦点的时候,才会触发函数,效果是,输入框失去焦点的时候才会输出输入框的value

$('input').on('change',function(){
      console.log(this.value)
 })

代码

b,所以使用:

keyup事件
注意:keydown(按下)、keypress(按住)、keyup(抬起)
keydown、keypress的输出值会延后一位实验代码

c,但是keyup无法监听鼠标输入(复制粘贴)

怎么办?
鼠标输入事件是:mousedown
鼠标粘贴事件是:paste
同时监听keyup和mousedown、paste事件(键盘,鼠标点击、粘贴)

    $('input').on('keyup mousedown paste',function(){
       console.log(this.value)
       })

效果一样不好
代码

c,怎么办??
解决办法:
input事件,这是才出来的事件
IE8之前是不支持的

  $('input').on('input',function(){
        console.log(this.value)
   })

d,但是还有一个bug
使用input事件,当输入中文的时候,输入框显示的是字母,只有用户按住空格键的时候,中文才会显示在输入框
input捕获的是输入的英文,下图:


图片.png

怎么办???

事件手册查找

图片.png

文本组合事件compositionend

查看compositionend

  $('input').on('compositionend',function(){
      console.log(this.value) 
  })

所以compositionend事件完美解决上面的所有bug
并且兼容所有的IE版本
但是compositionend事件太新了,有很多未知的东西

所有最后选用input事件,但是要记住 中文输入有一个bug

3)拿到this.value 通过value获取数据

a,准备一个数据库(一个数组)

图片.png

b,搜索函数(传入keyword 结果返回数组)
函数的功能:查看数据库数组里面的每个字符串是否包含keyword字符串

完整字符串.indexOf(keyword)>=0 //则完成字符串里面包含keyword字符串

function search(keyword){
   var result=[]
   for(var i=0;i<gatherdata.length;i++){
      if(gatherdata[i].indexOf(keyword)>=0){
      result.push(gatherdata[i]) 
   }
  }
  return result//返回数组
 }

c,监听里面判断输入是否为空,不为空才搜索

图片.png

d,通过value得到包含value的一个数组结果

     $('input').on('input',function(){
              if(this.value){
              let words=search(this.value)
              let ul=document.querySelector('#suggesstion')
              ul.innerHTML=''
              for(var i=0;i<words.length;i++){
                  let li=document.createElement('li')
                 li.innerText=words[i]
                 ul.appendChild(li)
          }
     }
 })

e,把同步改成异步
一般数据是通过后台获取,服务器一来一回需要时间,所以我们需要模拟这种需要时间的现象。
setTimeout()制造时间,形成异步景象
在异步的事件里返回值是没有意义的


图片.png

现在怎么办呢?
search没有返回值 那么得不到查询结果

解决办法:

图片.png

重要知识点:

同步改成异步把所有的返回值都通过函数来传递
通过函数的方式获取setTimeout里面的结果,在另外一个函数通过arguement的方式获取!!!

图片.png

代码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容

  • 总结: 鼠标事件 1.click与dbclick事件$ele.click()$ele.click(handler(...
    阿r阿r阅读 1,592评论 2 10
  • (续jQuery基础(1)) 第5章 DOM节点的复制与替换 (1)DOM拷贝clone() 克隆节点是DOM的常...
    凛0_0阅读 1,312评论 0 8
  • 第1章 鼠标事件 1-1 jQuery鼠标事件之click与dbclick事件 用交互操作中,最简单直接的操作就是...
    mo默22阅读 1,255评论 0 6
  • 在一个四季不甚分明的南方小城住久了,总觉得没得品尝过秋的韵味。想起郁达夫先生在风景秀丽的杭州,都要不远万里跑到北京...
    繁花落尽深眸阅读 364评论 14 7
  • 人世间、红尘外,仿佛细若微尘的存在,却被赋予了太多使命太多无奈,让我们在这偌大的宇宙中漂泊,终将消失在这...
    久念落尘阅读 172评论 0 1