LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

H5车牌输入软键盘

freeflydom
2023年10月25日 16:51 本文热度 470

前言

公司的业务背景是个大型园区,不可避免的要接触太多与车辆收费相关的业务,于是就有了这个车牌输入软键盘。对于车牌,用户手动输入的是不可信的,而且车牌第一位的地区简称打字输入实在是太麻烦,所以界定用户的输入内容,才能让双方都更加方便。

预览: pxsgdsb.github.io/licensePlat… (请使用移动端打开)

github:github.com/pxsgdsb/lic…

gitee:gitee.com/PxStrong/li…

实现

因为车牌内容是固定的,所以直接写死在元素内。但是,为了提高组件的复用性,需要做一些简单的封装

; (function ($) {

function LicensePlateselector() {

    // 输入框元素

    this.input_dom = `<ul class="plate_input_box">

        <li class="territory_key" data-type="territory_key"></li>

        <li style="margin-right:.8rem;"></li>

        <li></li>

        <li></li>

        <li></li>

        <li></li>

        <li data-end="end"></li>

        <li data-cls="new_energy" data-end="end" class="new_energy">

            <span>新能源</span>

        </li>

    </ul>`

    // 键盘元素

    this.keyboard_dom = `...省略`

}

/**

 * 初始化 车牌选择器

 * @param {string} config.elem  元素

 * @param {string} config.value  默认填充车牌

 * @param {number} config.activeIndex   默认选中下标 (从0开始)

 * @param {function} inputCallBack  输入事件回调

 * @param {function} deleteCallBack  键盘删除事件回调

 * @param {function} closeKeyCallBack  关闭键盘事件回调

 */

LicensePlateselector.prototype.init = function (config) {

    config = {

        elem: config.elem,

        value: config.value || "",

        activeIndex: config.activeIndex || false,

        inputCallBack: config.inputCallBack || false,

        deleteCallBack: config.deleteCallBack || false,

        closeKeyCallBack: config.closeKeyCallBack || false,

    }

    this.elemDom = $(config.elem);

    this.elemDom.append(this.input_dom);

    this.elemDom.append(this.keyboard_dom);

    // 监听输入

    this.watchKeyboardEvents(function(val){ 

        // 键盘输入回调

        if(config.inputCallBack){config.inputCallBack(val);}

    },function(){

        // 键盘删除事件回调

        if(config.deleteCallBack){config.deleteCallBack();}

    },function(){

        // 关闭键盘事件回调

        if(config.closeKeyCallBack){config.closeKeyCallBack();}

    })

    // 输入默认车牌

    if (config.value) {

        this.elemDom.find(".plate_input_box li").each(function (index) {

            if (config.value[index]) {

                $(this).text(config.value[index])

            }

        })

    }

    // 选中默认下标

    if(config.activeIndex){

        this.elemDom.find(".plate_input_box li").eq(config.activeIndex).click();

    }

};

})(jQuery);

watchKeyboardEvents()函数用于在元素创建完成后创建事件监听

/**

* 监听键盘输入

* @param {function} inputCallBack  输入事件回调

* @param {function} deleteCallBack  键盘删除事件回调

* @param {function} closeKeyCallBack  关闭键盘事件回调

*/

LicensePlateselector.prototype.watchKeyboardEvents = function(inputCallBack,deleteCallBack,closeKeyCallBack) {

        let _this = this

        // 输入框点击

        _this.elemDom.find(".plate_input_box li").click(function (event) {

            // 显示边框

            $(".plate_input_this").removeClass("plate_input_this");

            $(this).addClass("plate_input_this")

            // 弹出键盘

            // 关闭别的键盘

            $(".territory_keyboard").css("display","none")

            $(".alphabet_keyboard").css("display","none")

            if ($(this).attr("data-type") && $(this).attr("data-type") == "territory_key") {

                if (_this.elemDom.find(".territory_keyboard").css("display") == "none") {

                    _this.elemDom.find(".alphabet_keyboard").animate({ bottom: "-50rem" }).hide()

                    _this.elemDom.find(".territory_keyboard").show().animate({ bottom: 0 })

                }

            } else {

                if (_this.elemDom.find(".alphabet_keyboard").css("display") == "none") {

                    _this.elemDom.find(".territory_keyboard").animate({ bottom: "-50rem" }).hide()

                    _this.elemDom.find(".alphabet_keyboard").show().animate({ bottom: 0 })

                }

            }

            // 点击新能源

            if ($(this).attr("data-cls") == "new_energy") {

                $(this).empty().removeClass("new_energy").attr("data-cls", "")

            }

            event.stopPropagation();    //  阻止事件冒泡

        })


        // 地域键盘输入事件

        ......

    }

使用时html只需要创建一个根元素,js输入配置项,自动渲染组件。

<div id="demo"></div>

<script>

let licensePlateselector = new LicensePlateselector();

// 初始化

licensePlateselector.init({

    elem: "#demo",  // 根元素id

    value: "湘A",   // 默认填充车牌

    activeIndex: 2,    // 默认选中下标 (从0开始,不传时,默认不选中)

    inputCallBack:function(val){ // 输入事件回调

        console.log(val);

        let plate_number = licensePlateselector.getValue(); // 获取当前车牌

        console.log(plate_number);

    },

    deleteCallBack:function(){ // 键盘删除事件回调

        let plate_number = licensePlateselector.getValue(); // 获取当前车牌

        console.log(plate_number);

    },

    closeKeyCallBack:function(){ // 关闭键盘事件回调

        console.log("键盘关闭");

    },

})

</script>

参数

参数类型必填说明示例值
elemString指定元素选择器"#demo"
valueString默认填充车牌"湘A"
activeIndexnumber当前输入框下标,从0开始,不传时,默认不选中2
inputCallBackfunction输入事件回调函数,返回参数:当前输入的值
deleteCallBackfunction键盘删除事件回调函数
closeKeyCallBackfunction关闭键盘事件回调函数

方法

getValue 获取当前车牌

let plate_number = licensePlateselector.getValue();

setValue 设置车牌

licensePlateselector.setValue("粤A1E9Q3");

clearValue 清空车牌

licensePlateselector.clearValue();

END


查看原文



该文章在 2023/10/25 16:51:51 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved