H5車牌輸入軟鍵盤
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
前言公司的業務背景是個大型園區,不可避免的要接觸太多與車輛收費相關的業務,于是就有了這個車牌輸入軟鍵盤。對于車牌,用戶手動輸入的是不可信的,而且車牌第一位的地區簡稱打字輸入實在是太麻煩,所以界定用戶的輸入內容,才能讓雙方都更加方便。
實現因為車牌內容是固定的,所以直接寫死在元素內。但是,為了提高組件的復用性,需要做一些簡單的封裝。 ; (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);
/** * 監聽鍵盤輸入 * @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> 參數
方法
let plate_number = licensePlateselector.getValue();
licensePlateselector.setValue("粵A1E9Q3");
licensePlateselector.clearValue(); END該文章在 2023/10/25 16:51:51 編輯過 |
關鍵字查詢
相關文章
正在查詢... |