Layui input赋值/取值时自动换算单位

平时项目中金额,重量等单位数据库一般用分,千克保存,而在前台展示却是用元,吨。这样在给input的赋值/取值每次都要做单位换算很麻烦,修改了layui中form.js的代码以方便此类操作。

//路径
layui/lay/modules/form.js
//赋值
u.prototype.val = function (e, i) {
          
   
        var a = this,
            n = t(r + [lay-filter=" + e + "]);
        n.each(function (e, a) {
          
   
            var n = t(this);
            layui.each(i, function (e, t) {
          
   
                var i,
                    a = n.find([name=" + e + "]);
                if(a[0]){
          
   
                    i = a[0].type;
                    switch (i) {
          
   
                        case "checkbox":a[0].checked = t;break;
                        case "radio": a.each(function () {
          
   this.value == t && (this.checked = !0)});break;
                        default:
                            switch ($(a).attr("valueType")) {
          
   
                                case"money":a.val(parseFloat((t||0)/100).toFixed(2));break;
                                case"ton":a.val(parseFloat((t||0)/1000).toFixed(3));break;
                                default:$(a[0]).val(t);break;
                            }
                    }
                }
            })
        });
        f.render(null, e);
        return a.getValue(e)
    };
//取值
u.prototype.getValue = function (e, i) {
          
   
        i = i || t(r + [lay-filter=" + e + "]).eq(0);
        var a = {
          
   }, n = {
          
   }, l = i.find("input,select,textarea");
        layui.each(l, function (e, t) {
          
   
            t.name = (t.name || "").replace(/^s*|s*&/, "");
            if (t.name) {
          
   
                if (/^.*[]$/.test(t.name)) {
          
   
                    var i = t.name.match(/^(.*)[]$/g)[0];
                    a[i] = 0 | a[i];
                    t.name = t.name.replace(/^(.*)[]$/, "$1[" + a[i]++ + "]");
                }
                if(/^checkbox|radio$/.test(t.type)){
          
   
                    if(t.checked){
          
   
                        if(n.hasOwnProperty(t.name))
                            n[t.name]=n[t.name]+","+t.value;
                        else
                            n[t.name] = t.value;
                    }
                }else{
          
   
                    switch ($(t).attr("valueType")) {
          
   
                        case"money":n[t.name]=parseFloat((t.value||0)*100).toFixed(0);break;
                        case"ton":n[t.name]=parseFloat((t.value||0)*1000).toFixed(0);break;
                        default:n[t.name]=t.value;break;
                    }
                }
            }
        });
        return n
    };

使用方法

<form class="layui-form" lay-filter="tempForm">
	<div class="layui-col-md4">
    	<div class="layui-form-item">
        	<label class="layui-form-label">单价</label>
            <div class="layui-input-block">							<!--加上自定义属性‘valueType’-->
            	<input name="unitPrice" class="layui-input" autocomplete="off" valueType="money">
			</div>
		</div>
	</div>
</form>	 
<script>
layui.config({
          
   base:/}).use([form],function(form){
          
   
	form.val(tempForm,{
          
   unitPrice:10000});
})
</script>
经验分享 程序员 微信小程序 职场和发展