mirror of https://github.com/layui/layui
修复 input-number `lay-precision` 属性初始渲染时无效的问题 (#1409)
* 修复 input-number `lay-precision` 属性初始渲染时无效的问题 * update code * update codepull/1414/head
parent
f437d48138
commit
bd59eba6f2
|
@ -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;}
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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')
|
||||
},
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue