layUi radio 必填校验
如下所示,当 twins
字段不给默认值,此时两个 radio
均是未选中状态,提交 form
表单,默认 required
会通过校验,而且 form.field
会忽略 twins
字段,提交的时候不收集该字段
<div class="layui-form-item">
<label class="layui-form-label">是否双(多)胞胎:</label>
<div class="layui-input-block" id="twins">
<input type="radio" class="twins" name="twins" value="1" lay-verify="required" lay-filter="twins" title="是"/>
<input type="radio" class="twins" name="twins" value="0" lay-verify="required" lay-filter="twins" title="否"/>
</div>
</div>
解决方法:将 lay-verify="required"
替换成 自定义 校验 lay-verify = "radioRequired"
function radioRequired(value, item) {
let verifyName = $(item).attr('name')
, verifyType = $(item).attr('type')
, formElem = $(item).parents('.layui-form')//获取当前所在的form元素,如果存在的话
, verifyElem = formElem.find("input[name='" + verifyName + "']")//获取需要校验的元素
, isTrue = verifyElem.is(':checked')//是否命中校验
, focusElem = verifyElem.next().find('i.layui-icon');//焦点元素
if (!isTrue || !value) {
//定位焦点
focusElem.css(verifyType == 'radio' ? {"color": "#FF5722"} : {"border-color": "#FF5722"});
//对非输入框设置焦点
focusElem.first().attr("tabIndex", "1").css("outline", "0").blur(function () {
focusElem.css(verifyType == 'radio' ? {"color": ""} : {"border-color": ""});
}).focus();
return '必填项不能为空';
}
}
layui radio
不能通过 js 触发事件
layui
对 radio和select
组件做过包装处理,直接选中 input和select
元素通过 click()
触发是不生效的, 对于 radio
应该选中当前 radio相应的input元素
的下一个 class="layui-form-radio"
的 div
元素,在这个 div 上面触发 click()
, 此时会触发 form.on(radio(radio-filter),callback)
中的 callback
函数
const radioElement = $(layero).find('input.none-standard-radio[name="addressStandard"]')
radioElement.next('.layui-form-radio').trigger('click')
layui-select
自动触发 (select(filter),callback)
中的 callback
layui 源码中就是监听的是 dd
上的 click
事件,如下所示 liveTypeEle
为当前的 select
元素,需要选中 dl
中的 dd
元素才可以触发事件
function setDefaultValue(layero) {
let liveTypeEle = layero ? $(layero).find('select[name="livetype"]') : $('select[name="livetype"]')
liveTypeEle.val('1') // 这个要加上 否则有很奇怪的 bug
liveTypeEle.next().find('dl dd[lay-value="1"]').trigger('click')
liveTypeEle.attr('disabled', true)
form.render()
}
layer.load不生效
layer.load
在同步 ajax
请求中不生效,异步 Ajax
才生效