1.CSS部分: 將這幾行css代碼放到公共樣式文件
1 .plus-minus .layui-input-block{position: relative;} 2 .plus-minus input{position: absolute;top: 0px;left: 0px;text-align: center;} 3 .plus-minus button:nth-of-type(1){position: absolute;top: 0px;left: 0px;height: 100%;} 4 .plus-minus button:last-child{position: absolute;top: 0px;right: 0px;height: 100%;}
2.HTML部分: 直接在layUI的form表單輸入框代碼塊外套一層div,類名定義為“plus-minus”
input標簽增加data屬性:
data-step——點擊后增加減少的值,默認為1
data-maxvalue——最大值,默認為false,不限制最大值
data-minvalue——最小值,默認為false,不限制最小值
1 <div class="plus-minus"> 2 <div class="layui-form-item"> 3 <label class="layui-form-label">數量</label> 4 <div class="layui-input-block"> 5 <input type="number" name="num" data-step="1" data- 6 maxvalue="20" data-minvalue="1" lay-verify="required" 7 autocomplete="off" class="layui-input num"> 8 </div> 9 </div> 10 </div>
3.JS部分:將以下js代碼放到一個js文件中。
1 layui.define(['layer'], function (exports) { 2 var $ = layui.$ 3 var obj = { 4 //數字加減函數(基本參數對象,最大值返回函數,最小值返回函數) 5 plusminus: function () { 6 $(".plus-minus").each(function () { 7 //定義按鈕HTML 8 var plusminusbutton = 'button type="button" class="layui-btn layui-btn-sm layui-btn-normal vk-minus"><i class="fa fa-minus"></i></button>' + '<button type="button" class="layui-btn layui-btn-sm layui-btn-normal vk-plus"><i class="fa fa-plus"></i></button>' 9 10 var data = new Object; 11 data.step = $(this).find('input').data('step'); 12 data.maxvalue = $(this).find('input').data('maxvalue'); 13 data.minvalue = $(this).find('input').data('minvalue'); 14 15 //定義默認參數,合並參數 16 options = $.extend({ 17 step: 1, //每次點擊加減的值 18 maxvalue: false, //最大值,默認false,不限制 19 minvalue: false, //最小值,默認false,不限制 20 }, data); 21 22 var elem = $(this).find('input'), 23 step = parseInt(options.step), 24 maxvalue = options.maxvalue, 25 minvalue = options.minvalue; 26 27 //參數不規范則返回 28 if (elem == null || elem == undefined) { 29 return 30 }; 31 if (step == 0 || step == undefined) { 32 return 33 }; 34 //加入按鈕HTML 35 $(elem).after(plusminusbutton); 36 37 //點擊增加 38 $(elem).parent().on("click", ".vk-plus", function () { 39 var nowinput = $(this).siblings("input"), //當前輸入框元素 40 nowbutton = $(this).siblings("button"), //當前按鈕元素 41 oldval = $(nowinput).val(), //點擊前的值 42 newval = parseInt(oldval) + step; //點擊后的值 43 44 if (newval < maxvalue && newval > minvalue) { 45 $(nowbutton).removeClass("layui-btn-disabled"); 46 } 47 //判斷條件。是否最大值 48 if (maxvalue == false) { 49 $(nowinput).val(parseInt(oldval) + step); 50 } 51 52 if (maxvalue != 0 && newval < maxvalue) { 53 $(nowinput).val(parseInt(oldval) + step); 54 } 55 56 if (maxvalue != 0 && newval >= maxvalue) { 57 $(nowinput).val(maxvalue); 58 $(this).addClass("layui-btn-disabled"); 59 } 60 61 //模擬change事件 62 $(nowinput).trigger('change'); 63 64 return; 65 }); 66 67 //點擊減少(同上) 68 $(elem).parent().on("click", ".vk-minus", function () { 69 var nowinput = $(this).siblings("input"), 70 nowbutton = $(this).siblings("button"), //當前按鈕元素 71 oldval = $(elem).val(), 72 newval = parseInt(oldval) - step; 73 74 if (newval < maxvalue && newval > minvalue) { 75 $(nowbutton).removeClass("layui-btn-disabled"); 76 } 77 78 if (minvalue == false) { 79 $(nowinput).val(parseInt(oldval) - step); 80 } 81 82 if (minvalue != 0 && newval > minvalue) { 83 $(nowinput).val(parseInt(oldval) - step); 84 } 85 86 if (minvalue != 0 && newval <= minvalue) { 87 $(nowinput).val(minvalue); 88 $(this).addClass("layui-btn-disabled"); 89 } 90 91 //模擬change事件 92 $(nowinput).trigger('change'); 93 94 return; 95 }); 96 }); 97 } 98 }; 99 exports('common', obj); 100 });
4.JS實例化使用
1 layui.extend({ 2 common: '{/}/assets/js/common' //改為上方代碼所在文件的路徑 3 }).use(['common'], function(){ 4 var common = layui.common; common.plusminus(); 5 })
至此,數字加減模塊已經完成。動態添加的元素如果想綁定,只需要在添加完以后再重新使用該方法即可,即common.plusminus()。