diff --git a/examples/form.html b/examples/form.html index e82fae3b..a728226d 100644 --- a/examples/form.html +++ b/examples/form.html @@ -16,7 +16,6 @@ -
@@ -264,9 +263,7 @@


- - - + diff --git a/src/modules/form.js b/src/modules/form.js index 712dfeb4..8b1170bf 100644 --- a/src/modules/form.js +++ b/src/modules/form.js @@ -671,9 +671,9 @@ layui.define('layer', function(exports){ // elem 即要验证的区域表单选择器 - return true or false Form.prototype.validate = function(elem){ var that = this; - var stop = null; //验证不通过状态 - var verify = form.config.verify; //验证规则 - var DANGER = 'layui-form-danger'; //警示样式 + var stop = null; // 验证不通过状态 + var verify = form.config.verify; // 验证规则 + var DANGER = 'layui-form-danger'; // 警示样式 elem = $(elem); @@ -688,38 +688,42 @@ layui.define('layer', function(exports){ } } - //开始校验 + // 开始校验 layui.each(elem, function(_, item){ var othis = $(this); var verifyStr = othis.attr('lay-verify') || ''; var vers = verifyStr.split('|'); - var verType = othis.attr('lay-verType'); //提示方式 + var verType = othis.attr('lay-verType'); // 提示方式 var value = othis.val(); - othis.removeClass(DANGER); //移除警示样式 + othis.removeClass(DANGER); // 移除警示样式 - //遍历元素绑定的验证规则 + // 遍历元素绑定的验证规则 layui.each(vers, function(_, thisVer){ - var isTrue //是否命中校验 - ,errorText = '' //错误提示文本 - ,isFn = typeof verify[thisVer] === 'function'; + var isTrue; // 是否命中校验 + var errorText = ''; // 错误提示文本 + var rule = verify[thisVer]; // 获取校验规则 - //匹配验证规则 - if(verify[thisVer]){ - var isTrue = isFn ? errorText = verify[thisVer](value, item) : !verify[thisVer][0].test(value) + // 匹配验证规则 + if(rule){ + var isTrue = typeof rule === 'function' + ? errorText = rule(value, item) + : !rule[0].test(value); - //是否属于美化替换后的表单元素 - ,isForm2Elem = item.tagName.toLowerCase() === 'select' || /^checkbox|radio$/.test(item.type); + // 是否属于美化替换后的表单元素 + var isForm2Elem = item.tagName.toLowerCase() === 'select' || ( + /^checkbox|radio$/.test(item.type) + ); - errorText = errorText || verify[thisVer][1]; + errorText = errorText || rule[1]; if(thisVer === 'required'){ errorText = othis.attr('lay-reqText') || errorText; } - //如果是必填项或者非空命中校验,则阻止提交,弹出提示 + // 若为必填项或者非空命中校验,则阻止提交,弹出提示 if(isTrue){ - //提示层风格 + // 提示层风格 if(verType === 'tips'){ layer.tips(errorText, function(){ if(typeof othis.attr('lay-ignore') !== 'string'){ @@ -732,7 +736,7 @@ layui.define('layer', function(exports){ } else if(verType === 'alert') { layer.alert(errorText, {title: '提示', shadeClose: true}); } - //如果返回的为字符或数字,则自动弹出默认提示框;否则由 verify 方法中处理提示 + // 若返回的为字符或数字,则自动弹出默认提示框;否则由 verify 方法中处理提示 else if(/\bstring|number\b/.test(typeof errorText)){ layer.msg(errorText, {icon: 5, shift: 6}); } @@ -741,33 +745,17 @@ layui.define('layer', function(exports){ (isForm2Elem ? othis.next().find('input') : item).focus(); }, 7); - /* - // 非移动设备自动定位焦点 - if(!device.mobile){ - setTimeout(function(){ - (isForm2Elem ? othis.next().find('input') : item).focus(); - }, 7); - } else { // 移动设备定位 - $dom.scrollTop(function(){ - try { - return (isForm2Elem ? othis.next() : othis).focus().offset().top - 15 - } catch(e){ - return 0; - } - }()); - } - */ - othis.addClass(DANGER); return stop = true; } } }); + if(stop) return stop; }); return !stop; - } + }; // 提交表单并校验 var submit = Form.prototype.submit = function(filter, callback){ diff --git a/src/modules/table.js b/src/modules/table.js index cf121321..660f9cde 100644 --- a/src/modules/table.js +++ b/src/modules/table.js @@ -1144,16 +1144,16 @@ layui.define(['laytpl', 'laypage', 'form', 'util'], function(exports){ } }; - //数据合计行 + // 数据合计行 Class.prototype.renderTotal = function(data, totalRowData){ - var that = this - ,options = that.config - ,totalNums = {}; + var that = this; + var options = that.config; + var totalNums = {}; if(!options.totalRow) return; layui.each(data, function(i1, item1){ - //若数据项为空数组,则不往下执行(因为删除数据时,会将原有数据设置为 []) + // 若数据项为空数组,则不往下执行(因为删除数据时,会将原有数据设置为 []) if(layui.type(item1) === 'array' && item1.length === 0) return; that.eachCols(function(i3, item3){ @@ -1171,56 +1171,60 @@ layui.define(['laytpl', 'laypage', 'form', 'util'], function(exports){ var tds = []; that.eachCols(function(i3, item3){ var field = item3.field || i3; + + // 合计数据的特定字段 + var TOTAL_NUMS = totalRowData && totalRowData[item3.field]; - //td 内容 + // td 内容 var content = function(){ - var text = item3.totalRowText || '' - ,decimals = 'totalRowDecimals' in item3 ? item3.totalRowDecimals : 2 - ,thisTotalNum = parseFloat(totalNums[field]).toFixed(decimals) - ,tplData = { + var text = item3.totalRowText || ''; + var decimals = 'totalRowDecimals' in item3 ? item3.totalRowDecimals : 2; + var thisTotalNum = parseFloat(totalNums[field]).toFixed(decimals); + var tplData = { LAY_COL: item3 - } - ,getContent; + }; tplData[field] = thisTotalNum; - //获取自动计算的合并内容 - getContent = item3.totalRow ? (parseTempData.call(that, { + // 获取自动计算的合并内容 + var getContent = item3.totalRow ? (parseTempData.call(that, { item3: item3 ,content: thisTotalNum ,tplData: tplData }) || text) : text; - //如果直接传入了合计行数据,则不输出自动计算的结果 - return totalRowData ? (totalRowData[item3.field] || getContent) : getContent; - }() - ,td = ['' - ,'
' + function(){ var totalRow = item3.totalRow || options.totalRow; - //如果 totalRow 参数为字符类型,则解析为自定义模版 + // 如果 totalRow 参数为字符类型,则解析为自定义模版 if(typeof totalRow === 'string'){ return laytpl(totalRow).render($.extend({ - TOTAL_NUMS: totalNums[field] - ,LAY_COL: item3 + TOTAL_NUMS: TOTAL_NUMS || totalNums[field], + LAY_COL: item3 }, item3)); } return content;