修复 input-number `lay-precision` 属性初始渲染时无效的问题 (#1409)

* 修复 input-number `lay-precision` 属性初始渲染时无效的问题

* update code

* update code
pull/1414/head
morning-star 2023-10-31 08:39:22 +08:00 committed by GitHub
parent f437d48138
commit bd59eba6f2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 8 deletions

View File

@ -834,6 +834,7 @@ hr.layui-border-black{border-width: 0 0 1px;}
.layui-input-wrap .layui-input[type="number"]::-webkit-outer-spin-button,
.layui-input-wrap .layui-input[type="number"]::-webkit-inner-spin-button{-webkit-appearance: none !important;}
.layui-input-wrap .layui-input[type="number"]{-moz-appearance: textfield;}
.layui-input-wrap .layui-input[type="number"].layui-input-number-out-of-range{color:#ff5722;}

View File

@ -17,6 +17,7 @@ layui.define(['lay', 'layer', 'util'], function(exports){
var SHOW = 'layui-show';
var HIDE = 'layui-hide';
var DISABLED = 'layui-disabled';
var OUT_OF_RANGE = 'layui-input-number-out-of-range';
var Form = function(){
this.config = {
@ -174,7 +175,7 @@ layui.define(['lay', 'layer', 'util'], function(exports){
// 初始化全局的 autocomplete
options.autocomplete && inputs.attr('autocomplete', options.autocomplete);
var handleInputNumberEvents = function(elem, eventType){
var handleInputNumber = function(elem, eventType){
var that = this;
var rawValue = elem.val();
var value = Number(rawValue);
@ -182,7 +183,8 @@ layui.define(['lay', 'layer', 'util'], function(exports){
var min = Number(elem.attr('min'));
var max = Number(elem.attr('max'));
var precision = Number(elem.attr('lay-precision'));
var noAction = eventType === 'blur' && rawValue === '' // 失焦时空值不作处理
var noAction = eventType !== 'click' && rawValue === ''; // 初始渲染和失焦时空值不作处理
var isInit = eventType === 'init';
if(isNaN(value)) return; // 若非数字,则不作处理
@ -200,13 +202,21 @@ layui.define(['lay', 'layer', 'util'], function(exports){
precision = precision >= 0 ? precision : Math.max(decimals(step), decimals(rawValue));
if(!noAction){
if(value <= min) value = min;
if(value >= max) value = max;
// 初始渲染时只处理数字精度
if(!isInit){
if(value <= min) value = min;
if(value >= max) value = max;
}
if(precision) value = value.toFixed(precision);
elem.val(value)
elem.val(value);
}
// 超出范围的样式
var outOfRange = value < min || value > max;
elem[outOfRange && !noAction ? 'addClass' : 'removeClass'](OUT_OF_RANGE);
if(isInit) return;
// 更新按钮状态
var controlBtn = {
increment: elem.next().find('.layui-icon-up'),
@ -285,6 +295,8 @@ layui.define(['lay', 'layer', 'util'], function(exports){
opts.show === 'auto' && showAffix(elemAffix, othis.val());
typeof opts.init === 'function' && opts.init.call(this, othis, opts);
// 输入事件
othis.on('input propertychange', function(){
var value = this.value;
@ -341,11 +353,14 @@ layui.define(['lay', 'layer', 'util'], function(exports){
split: true,
className: 'layui-input-number',
disabled: othis.is('[disabled]'), // 跟随输入框禁用状态
init: function(elem){
handleInputNumber.call(this, elem, 'init')
},
click: function(elem){
handleInputNumberEvents.call(this, elem, 'click')
handleInputNumber.call(this, elem, 'click')
},
blur: function(elem){
handleInputNumberEvents.call(this, elem, 'blur')
handleInputNumber.call(this, elem, 'blur')
},
}
};