动态下拉菜单框

prevAll ().length; 获取被选中元素上面的兄弟元素的个数

动态下拉菜单框思路

使用工具  java  ajax mysql   新手手打 第一次 当做复盘  语言可能组织不合理 理解万岁


 前台

  定义一个html页面设置一个input输入框  在输入框下面添加一个div1显示下拉列表

  列表项  使用div标签实现  通过ajax动态请求数据库 使用jq生成 最多显示5个根需求而定

  添加对应的css


  js实现动态菜单功能

        给input输入框添加一个onkeyup事件

当键盘弹起时获取输入框中的value值使用trim()方法去除首尾空

如果获取到的数据为空, 使用div对象.html(" ");对下拉列表进行清空并隐藏,

如果不为空,通过ajax发送请求到服务器使用input输入框中的值进行模糊查询;将返回的结果转换位json数组格式,遍历json数组进行div 列表项的拼接最多拼接5次 给每一个div指定一个class方便后期获取.拼接完成以后将列表项添加到div1中并使其显示

 按下键盘 上 下  给选中项添加背景颜色  按下键盘上  对应的code码是38 下是40

  准备一个class 样式  bg设置bgcolor

  当页面加载完成时 给网页 document 绑定一个onkeydown事件

  首先定义一个event对象监听键盘

   var eve=event||window.event;

  如果监听到向上事件时  使input输入框失去焦点

  通过上述的class 获取所有下拉框

  使用prevAll方法获取被设置过bg样式的下拉框个数

            如果为0的话 将下拉框中最后一个设置样式 因为下拉框选中只能有一个 所以添加样式之前先移除所有    下拉框的bg样式  通过eq(),addclass()实现

           如果有设置过的话 prevAll().length会返回该元素前面有多少个兄弟元素

           假设被选中元素下标为2前面就有两个兄弟元素  下标分别是0,1 上一个元素的下标就是 prevAll().length-1  当这个length减到0时 会继续向最后一个下拉框添加样式

   如果监听到向下事件时 使input输入框失去焦点

      通过上述的class 获取所有下拉框

      通过hasClass("bg")判断是否被设置过样式 如果没有将第一个添加样式

      如果被设置过  var len=prevAll().length获取该元素前面有多少个兄弟元素

      继续判断是不是最后一个元素 如果是最后一个元素的话

        (所有列表项个数-1==len){

            //  假设共有5个元素 最后一个被选中时 他前面得到兄弟个数为4  5-当前元素也等于4

              给第一个元素添加样式

          }否则{

          假设被选中的元素是4 它的下表是3  那他前面的兄弟个数(len)就有3个 所以下一个列表项的下标就是len+1

          当下标加到4时元素个数是第5个 再次点击就会执行 上面的方法给第一个列表项添加样式

}

js代

传上来就没缩进了

<%--

Created by IntelliJ IDEA.

User: Administrator

Date: 2019/5/15

Time: 11:11

To change this template use File | Settings | File Templates.

--%>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

<title>百度下拉菜单</title>

</head>

<style type="text/css">

*{

margin:0;

padding:0;

}

#box1{

width:498px;

border:1px solid skyblue;

border-bottom:none;

}

#inputid{

width:500px;

height:30px;

border:1px solid skyblue;

}

#box1 div{

border-bottom:1px solid skyblue;

height:28px;

}

.optcss{

background:skyblue;

}

</style>

<script src="js/jquery-3.4.0.js" type="text/javascript" charset="UTF-8"></script>

<script type="text/javascript">

//页面加载完毕先将下拉框隐藏

    // $(function () {

//    $("#box1>div").hide();

// });

    //通过ajax获取信息显示到下拉框中

    //

    function test() {

//获取文本框中的值

      var inputval=$("#inputid").val().trim();

if (inputval.length==0){

$("#box1").hide().html(" ");

}else{

// $("#box1").html(" ");

          //获取input框中的值

          //发送ajax请求

          $.get("Servlet",{"method":"selopt","val":inputval},function (res) {

//将获取到的信息 拼接到div中发送到页面

              var opts="";

var arr=JSON.parse(res);

for (var i=0;i

if (i<5){

opts+="<div class='opt'>"+arr[i]+"</div>";

}

}

//在show直接修改了 div中的代码 相当于变相清空了里面的代码

              $("#box1").show().html(opts);

});

}

}

//获取整个页面对象 绑定事件

    $(document).keydown(function () {

// 上38 下40

        var eve=event||window.event;

//如果按下上  将最后一个下拉选项颜色改变 并使输入框失去焦点

        if(eve.keyCode==38){

$("#inputid").blur();

//获取 下拉框中被设置过bg元素的上面还有多少节点

            var opts=$(".opt");

var csslengthup=$(".optcss").prevAll().length;

//判断是否有被设置过颜色的元素 如果没有

            if (csslengthup==0){

//获取所有带opt的元素并将最后一个元素添加样式

                //移除所有被选中样式

              opts.removeClass("optcss");

//然后添加

                opts.eq(opts.length-1).addClass("optcss");

}else{

//如果有被添加的元素  将该元素的前一个添加样式

                opts.removeClass("optcss").eq(csslengthup-1).addClass("optcss");

}

}else if(eve.keyCode==40){

//使输入框失去焦点

            $("#inputid").blur();

//获取所有的列表项

            var opts=$(".opt");

//判断 如果没有被设置过样式 将第1个添加样式

            if($(".optcss").hasClass("optcss")){

//获取设置了bg样式元素的哥哥节点

                var csslengthdown=$(".optcss").prevAll().length;

if(csslengthdown==opts.length-1){//如果是最后一个元素 将第一个添加样式

                    //将第一个元素设置样式

                    opts.removeClass("optcss").eq(0).addClass("optcss");

}else{

opts.removeClass("optcss").eq(csslengthdown+1).addClass("optcss");

}

}else{

opts.removeClass("optcss").eq(0).addClass("optcss");

}

}

});

</script>

<body>

<input type="text" id="inputid" onkeyup="test()">

<div id="box1">

</div>

</body>

</html>

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

推荐阅读更多精彩内容

  • //------------------------- 第一章 认识JQuery ----------------...
    米塔塔阅读 711评论 0 9
  • 一、JS前言 (1)认识JS 也许你已经了解HTML标记(也称为结构),知道了CSS样式(也称为表示),会使用HT...
    凛0_0阅读 2,763评论 0 8
  • 1. tab列表折叠效果 html: 能源系统事业部 岗位名称: 工作地点 岗位名...
    lilyping阅读 1,850评论 0 1
  • jquery介绍 jQuery是目前使用最广泛的javascript函数库。据统计,全世界排名前100万的网站,有...
    1263536889阅读 357评论 0 1
  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 1,332评论 0 2