使用jq或者 vue 編寫車牌控制元件
基於客戶要求,方便使用者操作,要求在輸入車牌號的時候能有個車牌號的控制元件,使用者可以直接點選
需求分析:
事件:1.鍵盤的彈出 和關閉,2.鍵盤切換(中英文)3.獲取選中的資料 4.大於6個字元禁止繼續點選
樣式:鍵盤文字陳列樣式
jq方法:點選鍵盤時獲取所在的li 獲取值新增到文字框中
vue:思路基本同上
坑:在vue繫結事件獲取目標元素時,有可能獲取的是父元素或者其他元素,此時的innerhtml不一定是正確的資料
解決方案:獲取目標元素是,檢視自己想要資料與其他資料的不同點,用這個不同點進行排他
比如本專案中:想要獲取的資料正好都是li標籤的資料,目標元素不是li則不執行下面的事件
小知識:
字串的操作:a = a.substring(開始的索引,結束的索引)可以對字元進行擷取,或者去除某一段
貼上程式碼:
程式碼有點繁瑣,可按需進行刪改
// jq程式碼 記得引入jq檔案
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
<script
src="js/jquery-3.1.1.min.js"
type="text/javascript"
charset="utf-8"
></script>
</head>
<style>
#container {
width: 100%;
height: 100%;
padding-top: 50px;
}
#carLicenseBox {
width: 80%;
border: 1px solid #cccccc;
border-radius: 10px;
margin: 0 auto;
padding-bottom: 20px;
overflow: hidden;
background-color: #ffffff;
}
#carLicenseBox .carLicenseTitle {
width: 100%;
height: 70px;
background-color: #478ff1;
text-align: center;
line-height: 70px;
color: white;
font-size: 18px;
}
#carLicenseBox .carLicenseMain {
width: 100%;
height: 160px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
#carLicenseBox .carLicenseMain ul {
width: 100%;
height: 36px;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
}
#carLicenseBox .carLicenseMain ul li {
width: 26px;
height: 34px;
border: 2px solid #cccccc;
text-align: center;
line-height: 34px;
float: left;
margin-right: 8px;
}
#carLicenseBox .carLicenseMain ul li:last-of-type {
margin: 0;
}
#carLicenseBox .carLicenseMain ul li.active {
border: 2px solid #478ff1;
}
#carLicenseBox .carLicenseMain ul li.xinnengyuan {
background-size: 100% 100%;
border: 2px dashed #cccccc;
}
#carLicenseBox .submitBtn {
width: 80%;
height: 45px;
background-color: #478ff1;
border: none;
border-radius: 6px;
text-align: center;
line-height: 45px;
color: white;
font-size: 20px;
margin-left: 10%;
}
#keyboardBox {
width: 50%;
position: absolute;
bottom: 0px;
left: 0px;
z-index: 999;
}
#keyboardBox .provienceBox,
#keyboardBox .textBox {
width: 100%;
background-color: #d0d5d9;
padding-top: 10px;
padding-bottom: 4px;
}
#keyboardBox .provienceBox ul,
#keyboardBox .textBox ul {
width: 100%;
display: flex;
flex-direction: row;
justify-content: space-around;
align-items: center;
margin-top: 10px;
}
#keyboardBox .provienceBox ul:first-of-type,
#keyboardBox .textBox ul:first-of-type {
margin-top: 0px;
}
#keyboardBox .provienceBox ul li,
#keyboardBox .textBox ul li {
width: 40px;
height: 40px;
border-radius: 6px;
text-align: center;
line-height: 40px;
float: left;
background-color: #ffffff;
}
#keyboardBox .textBox {
display: none;
}
#keyboardBox .provienceBox ul .changeContentBtn,
#keyboardBox .provienceBox ul .deleteBtn,
#keyboardBox .textBox ul .changeContentBtn,
#keyboardBox .textBox ul .deleteBtn {
width: 40px;
height: 40px;
background-color: #acb3bb;
text-align: center;
line-height: 40px;
}
* {
margin: 0;
padding: 0;
}
ul li {
list-style: none;
}
body {
background-color: #f3f3f3;
}
.fl {
display: block;
float: left;
}
.fr {
display: block;
float: right;
}
.container {
width: 100%;
height: 100%;
}
</style>
<body>
<div>
<div id="keyboardBox">
<div style=" height: 25px;
width: 100%;">
<p style="float: left;">請選擇:</p>
<div id="inpt"
style="border: 1px solid #ccc;
height: 25px;
border-radius: 5px;
text-align: center;
width: 50%;
float: left"></div>
</div>
<div class="provienceBox" id="provienceBox" $ref="reference">
<ul>
<li>京</li>
<li>津</li>
<li>渝</li>
<li>滬</li>
<li>冀</li>
<li>晉</li>
<li>遼</li>
<li>吉</li>
<li>黑</li>
<li>蘇</li>
</ul>
<ul>
<li>浙</li>
<li>皖</li>
<li>閩</li>
<li>贛</li>
<li>魯</li>
<li>豫</li>
<li>鄂</li>
<li>湘</li>
<li>粵</li>
<li>瓊</li>
</ul>
<ul>
<li>川</li>
<li>貴</li>
<li>雲</li>
<li>陝</li>
<li>甘</li>
<li>青</li>
<li>蒙</li>
<li>桂</li>
<li>寧</li>
<li>新</li>
</ul>
<ul>
<li class="changeContentBtn other">ABC</li>
<li>藏</li>
<li>使</li>
<li>領</li>
<li>警</li>
<li>學</li>
<li>港</li>
<li>澳</li>
<li class="deleteBtn other">刪除</li>
</ul>
</div>
<div class="textBox" id="textBox">
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>0</li>
</ul>
<ul>
<li>Q</li>
<li>W</li>
<li>E</li>
<li>R</li>
<li>T</li>
<li>Y</li>
<li>U</li>
<li>I</li>
<li>O</li>
<li>P</li>
</ul>
<ul>
<li>A</li>
<li>S</li>
<li>D</li>
<li>F</li>
<li>G</li>
<li>H</li>
<li>J</li>
<li>K</li>
<li>L</li>
<li>Z</li>
</ul>
<ul>
<li class="changeContentBtn other">返回</li>
<li>X</li>
<li>C</li>
<li>V</li>
<li>B</li>
<li>N</li>
<li>M</li>
<li class="deleteBtn other">刪除</li>
<li class="trueBtn other">確定</li>
</ul>
<ul></ul>
</div>
</div>
</div>
<script>
$(function() {
var that = this;
var num = 6;
//切換鍵盤
$(".changeContentBtn").click(function() {
if ($(this).html() == "ABC") {
$("#textBox").show();
$("#provienceBox").hide();
} else {
$("#textBox").hide();
$("#provienceBox").show();
}
});
//獲取當前車牌數字索引
function getIndex() {
var index;
if ($("#inpt").text() == "") {
index = 0;
} else {
var a = $("#inpt").text();
index = a.length;
}
return index;
}
//自定義鍵盤處理函式
function keyboard(num, self) {
console.log($(self).html(), "$(self).html()");
var index = getIndex();
if (index <= num) {
var a = $(self).html();
var b = $("#inpt").text();
var c = b + a;
$("#inpt").text(c);
}
}
// 刪除事件
$(".deleteBtn").click(function() {
if ($("#inpt").text().length > 0) {
var a = $("#inpt").text().length - 1;
var b = $("#inpt")
.text()
.substring(0, a);
$("#inpt").text(b);
}
});
// trueBtn keyboardBox
$(".trueBtn").click(function() {
if ($("#inpt").text().length > 0) {
$("#keyboardBox").hide()
}
});
//省份鍵盤點選事件
$("#provienceBox ul li:not(.other)").click(function() {
var self = this;
keyboard(num, self);
});
//文字鍵盤點選事件
$("#textBox ul li:not(.other)").click(function() {
var self = this;
keyboard(num, self);
});
});
</script>
</body>
</html>
//vue 程式碼 其實用for 遍歷li元素也是可以的這樣獲取文字也好獲取
<template>
<div>
<div id="keyboardBox" v-show="keyboardBox">
<div style=" height: 25px; width: 100%;">
<p style="float: left;">請選擇:</p>
<div id="inpt" style="border: 1px solid #ccc;line-height: 25px; height: 25px;border-radius: 5px;text-align: center; width: 50%; float: left">{{key_box}}</div>
</div>
<div class="provienceBox hover" @click="provienceBoxclick($event)" v-show="provienceBox" id="provienceBox" >
<ul>
<li>京</li>
<li>津</li>
<li>渝</li>
<li>滬</li>
<li>冀</li>
<li>晉</li>
<li>遼</li>
<li>吉</li>
<li>黑</li>
<li>蘇</li>
</ul>
<ul>
<li>浙</li>
<li>皖</li>
<li>閩</li>
<li>贛</li>
<li>魯</li>
<li>豫</li>
<li>鄂</li>
<li>湘</li>
<li>粵</li>
<li>瓊</li>
</ul>
<ul>
<li>川</li>
<li>貴</li>
<li>雲</li>
<li>陝</li>
<li>甘</li>
<li>青</li>
<li>蒙</li>
<li>桂</li>
<li>寧</li>
<li>新</li>
</ul>
<ul>
<li class="changeContentBtn other" >ABC</li>
<li>藏</li>
<li>使</li>
<li>領</li>
<li>警</li>
<li>學</li>
<li>港</li>
<li>澳</li>
<li class="deleteBtn other">刪除</li>
</ul>
</div>
<div class="textBox hover" v-show="textBox" @click="text_box($event)" id="textBox">
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>0</li>
</ul>
<ul>
<li>Q</li>
<li>W</li>
<li>E</li>
<li>R</li>
<li>T</li>
<li>Y</li>
<li>U</li>
<li>I</li>
<li>O</li>
<li>P</li>
</ul>
<ul>
<li>A</li>
<li>S</li>
<li>D</li>
<li>F</li>
<li>G</li>
<li>H</li>
<li>J</li>
<li>K</li>
<li>L</li>
<li>Z</li>
</ul>
<ul>
<li class="changeContentBtn other">返回</li>
<li class="deleteBtn other">刪除</li>
<li>X</li>
<li>C</li>
<li>V</li>
<li>B</li>
<li>N</li>
<li>M</li>
<li class="trueBtn deleteBtn other">確定</li>
</ul>
</div>
</div>
</div>
</template>
<style>
.hover:hover{
cursor:pointer
}
#carLicenseBox {
width: 80%;
border: 1px solid #cccccc;
border-radius: 10px;
margin: 0 auto;
padding-bottom: 20px;
overflow: hidden;
background-color: #ffffff;
}
#carLicenseBox .carLicenseTitle {
width: 100%;
height: 70px;
background-color: #478ff1;
text-align: center;
line-height: 70px;
color: white;
font-size: 18px;
}
#carLicenseBox .carLicenseMain {
width: 100%;
height: 160px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
#carLicenseBox .carLicenseMain ul {
width: 100%;
height: 36px;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
}
#carLicenseBox .carLicenseMain ul li {
width: 26px;
height: 34px;
border: 2px solid #cccccc;
text-align: center;
line-height: 34px;
float: left;
margin-right: 8px;
}
#carLicenseBox .carLicenseMain ul li:last-of-type {
margin: 0;
}
#carLicenseBox .carLicenseMain ul li.active {
border: 2px solid #478ff1;
}
#carLicenseBox .carLicenseMain ul li.xinnengyuan {
background-size: 100% 100%;
border: 2px dashed #cccccc;
}
#carLicenseBox .submitBtn {
width: 80%;
height: 45px;
background-color: #478ff1;
border: none;
border-radius: 6px;
text-align: center;
line-height: 45px;
color: white;
font-size: 20px;
margin-left: 10%;
}
#keyboardBox {
width: 50%;
position: absolute;
bottom: 0px;
left: 0px;
z-index: 999;
}
#keyboardBox .provienceBox,
#keyboardBox .textBox {
width: 100%;
background-color: #d0d5d9;
padding-top: 10px;
padding-bottom: 4px;
}
#keyboardBox .provienceBox ul,
#keyboardBox .textBox ul {
width: 100%;
display: flex;
flex-direction: row;
justify-content: space-around;
align-items: center;
margin-top: 10px;
}
#keyboardBox .provienceBox ul:first-of-type,
#keyboardBox .textBox ul:first-of-type {
margin-top: 0px;
}
#keyboardBox .provienceBox ul li,
#keyboardBox .textBox ul li {
width: 40px;
height: 40px;
border-radius: 6px;
text-align: center;
line-height: 40px;
float: left;
background-color: #ffffff;
}
#keyboardBox .provienceBox ul .changeContentBtn,
#keyboardBox .provienceBox ul .deleteBtn,
#keyboardBox .textBox ul .changeContentBtn,
#keyboardBox .textBox ul .deleteBtn {
width: 40px;
height: 40px;
background-color: #acb3bb;
text-align: center;
line-height: 40px;
}
* {
margin: 0;
padding: 0;
}
ul li {
list-style: none;
}
body {
background-color: #f3f3f3;
}
.fl {
display: block;
float: left;
}
.fr {
display: block;
float: right;
}
</style>
<script>
export default {
data(){
return{
keyboardBox:true,
provienceBox:true,
textBox:false,
key_box:""
}
},
methods:{
provienceBoxclick(e){
console.log(e,'eeeeeeeeeeee')
if(e.toElement.localName != 'li'){
return
}
var a = e.target.innerText
console.log(a,'======a')
if(a == 'ABC'){
this.textBox = true
this.provienceBox = false
} else if (a == '刪除'){
console.log(this.key_box.length,'-------')
this.key_box = this.key_box.substring(0, this.key_box.length-1)
} else {
if (this.key_box.length <= 5) {
var key = this.key_box
this.key_box = key + a;
}
}
},
text_box(e){
if(e.toElement.localName != 'li'){
return
}
var a = e.target.innerText
if(a == "刪除"){
console.log(this.key_box.length,'-------')
var cc = '123456'
this.key_box = this.key_box.substring(0, this.key_box.length-1)
console.log(this.key_box,'==========')
// this.key_box = this.key_box.substring(0, this.key_box.length)
} else if(a == "確定"){
this.keyboardBox = false
} else if(a == "返回"){
this.textBox = false
this.provienceBox = true
} else{
if (this.key_box.length <= 5) {
var key = this.key_box
this.key_box = key + a;
}
}
},
},
}
</script>