動(dòng)態(tài)下拉菜單框

prevAll ().length; 獲取被選中元素上面的兄弟元素的個(gè)數(shù)

動(dòng)態(tài)下拉菜單框思路

使用工具? java? ajax mysql?? 新手手打 第一次 當(dāng)做復(fù)盤? 語言可能組織不合理 理解萬歲


?前臺(tái)

? 定義一個(gè)html頁面設(shè)置一個(gè)input輸入框? 在輸入框下面添加一個(gè)div1顯示下拉列表

? 列表項(xiàng)? 使用div標(biāo)簽實(shí)現(xiàn)? 通過ajax動(dòng)態(tài)請(qǐng)求數(shù)據(jù)庫 使用jq生成 最多顯示5個(gè)根需求而定

? 添加對(duì)應(yīng)的css


? js實(shí)現(xiàn)動(dòng)態(tài)菜單功能

? ? ? ? 給input輸入框添加一個(gè)onkeyup事件

當(dāng)鍵盤彈起時(shí)獲取輸入框中的value值使用trim()方法去除首尾空

如果獲取到的數(shù)據(jù)為空, 使用div對(duì)象.html(" ");對(duì)下拉列表進(jìn)行清空并隱藏,

如果不為空,通過ajax發(fā)送請(qǐng)求到服務(wù)器使用input輸入框中的值進(jìn)行模糊查詢;將返回的結(jié)果轉(zhuǎn)換位json數(shù)組格式,遍歷json數(shù)組進(jìn)行div 列表項(xiàng)的拼接最多拼接5次 給每一個(gè)div指定一個(gè)class方便后期獲取.拼接完成以后將列表項(xiàng)添加到div1中并使其顯示

?按下鍵盤 上 下? 給選中項(xiàng)添加背景顏色? 按下鍵盤上? 對(duì)應(yīng)的code碼是38 下是40

? 準(zhǔn)備一個(gè)class 樣式? bg設(shè)置bgcolor

? 當(dāng)頁面加載完成時(shí) 給網(wǎng)頁 document 綁定一個(gè)onkeydown事件

? 首先定義一個(gè)event對(duì)象監(jiān)聽鍵盤

?? var eve=event||window.event;

? 如果監(jiān)聽到向上事件時(shí)? 使input輸入框失去焦點(diǎn)

? 通過上述的class 獲取所有下拉框

? 使用prevAll方法獲取被設(shè)置過bg樣式的下拉框個(gè)數(shù)

??????????? 如果為0的話 將下拉框中最后一個(gè)設(shè)置樣式 因?yàn)橄吕蜻x中只能有一個(gè) 所以添加樣式之前先移除所有? ? 下拉框的bg樣式? 通過eq(),addclass()實(shí)現(xiàn)

?????????? 如果有設(shè)置過的話 prevAll().length會(huì)返回該元素前面有多少個(gè)兄弟元素

? ? ? ? ?? 假設(shè)被選中元素下標(biāo)為2前面就有兩個(gè)兄弟元素? 下標(biāo)分別是0,1 上一個(gè)元素的下標(biāo)就是 prevAll().length-1? 當(dāng)這個(gè)length減到0時(shí) 會(huì)繼續(xù)向最后一個(gè)下拉框添加樣式

?? 如果監(jiān)聽到向下事件時(shí) 使input輸入框失去焦點(diǎn)

? ? ? 通過上述的class 獲取所有下拉框

? ? ? 通過hasClass("bg")判斷是否被設(shè)置過樣式 如果沒有將第一個(gè)添加樣式

? ? ? 如果被設(shè)置過? var len=prevAll().length獲取該元素前面有多少個(gè)兄弟元素

? ? ? 繼續(xù)判斷是不是最后一個(gè)元素 如果是最后一個(gè)元素的話

? ? ??? (所有列表項(xiàng)個(gè)數(shù)-1==len){

? ? ? ? ? ? //? 假設(shè)共有5個(gè)元素 最后一個(gè)被選中時(shí) 他前面得到兄弟個(gè)數(shù)為4? 5-當(dāng)前元素也等于4

? ? ? ? ? ? ? 給第一個(gè)元素添加樣式

? ? ? ? ? }否則{

? ? ? ? ? 假設(shè)被選中的元素是4 它的下表是3? 那他前面的兄弟個(gè)數(shù)(len)就有3個(gè) 所以下一個(gè)列表項(xiàng)的下標(biāo)就是len+1

? ? ? ? ? 當(dāng)下標(biāo)加到4時(shí)元素個(gè)數(shù)是第5個(gè) 再次點(diǎn)擊就會(huì)執(zhí)行 上面的方法給第一個(gè)列表項(xiàng)添加樣式

}

js代

傳上來就沒縮進(jìn)了

<%--

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框中的值

? ? ? ? ? //發(fā)送ajax請(qǐng)求

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

//將獲取到的信息 拼接到div中發(fā)送到頁面

? ? ? ? ? ? ? var opts="";

var arr=JSON.parse(res);

for (var i=0;i

if (i<5){

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

}

}

//在show直接修改了 div中的代碼 相當(dāng)于變相清空了里面的代碼

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

});

}

}

//獲取整個(gè)頁面對(duì)象 綁定事件

? ? $(document).keydown(function () {

// 上38 下40

? ? ? ? var eve=event||window.event;

//如果按下上? 將最后一個(gè)下拉選項(xiàng)顏色改變 并使輸入框失去焦點(diǎn)

? ? ? ? if(eve.keyCode==38){

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

//獲取 下拉框中被設(shè)置過bg元素的上面還有多少節(jié)點(diǎn)

? ? ? ? ? ? var opts=$(".opt");

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

//判斷是否有被設(shè)置過顏色的元素 如果沒有

? ? ? ? ? ? if (csslengthup==0){

//獲取所有帶opt的元素并將最后一個(gè)元素添加樣式

? ? ? ? ? ? ? ? //移除所有被選中樣式

? ? ? ? ? ? ? opts.removeClass("optcss");

//然后添加

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

}else{

//如果有被添加的元素? 將該元素的前一個(gè)添加樣式

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

}

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

//使輸入框失去焦點(diǎn)

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

//獲取所有的列表項(xiàng)

? ? ? ? ? ? var opts=$(".opt");

//判斷 如果沒有被設(shè)置過樣式 將第1個(gè)添加樣式

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

//獲取設(shè)置了bg樣式元素的哥哥節(jié)點(diǎn)

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

if(csslengthdown==opts.length-1){//如果是最后一個(gè)元素 將第一個(gè)添加樣式

? ? ? ? ? ? ? ? ? ? //將第一個(gè)元素設(shè)置樣式

? ? ? ? ? ? ? ? ? ? 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>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • //------------------------- 第一章 認(rèn)識(shí)JQuery ----------------...
    米塔塔閱讀 808評(píng)論 0 9
  • 一、JS前言 (1)認(rèn)識(shí)JS 也許你已經(jīng)了解HTML標(biāo)記(也稱為結(jié)構(gòu)),知道了CSS樣式(也稱為表示),會(huì)使用HT...
    凜0_0閱讀 2,922評(píng)論 0 8
  • 1. tab列表折疊效果 html: 能源系統(tǒng)事業(yè)部 崗位名稱: 工作地點(diǎn) 崗位名...
    lilyping閱讀 2,009評(píng)論 0 1
  • jquery介紹 jQuery是目前使用最廣泛的javascript函數(shù)庫。據(jù)統(tǒng)計(jì),全世界排名前100萬的網(wǎng)站,有...
    1263536889閱讀 396評(píng)論 0 1
  • 1.JQuery 基礎(chǔ) 改變web開發(fā)人員創(chuàng)造搞交互性界面的方式。設(shè)計(jì)者無需花費(fèi)時(shí)間糾纏JS復(fù)雜的高級(jí)特性。 1....
    LaBaby_閱讀 1,503評(píng)論 0 2

友情鏈接更多精彩內(nèi)容