平时项目中金额,重量等单位数据库一般用分,千克保存,而在前台展示却是用元,吨。这样在给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>