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>