Layui彈層layer中select沒CSS樣式或渲染失效的解決方法
一、必須給表單體系所在的父元素加上 class="layui-form"
在一個容器中設定 class="layui-form" 來標識一個表單元素塊,如果你不想用 form,你可以換成 div 等任何一個普通元素;記得要在 外層容器 中定義 class="layui-form",form 模塊才能正常工作。
<form class="layui-form">
<!-- 這裏是form裏面的代碼 輸入框,選擇框、複選框,單選框等等 -->
</form>
二、調用依賴加載模塊:form
當你使用表單時,layui 會對 select、checkbox、radio 等原始元素隱藏,從而進行美化修飾處理。但這需要依賴於 form 組件,所以你必須加載 form,並且執行一個實例;
layui.use('form', function(){
var form = layui.form; //只有執行了這一步,部分表單元素纔會自動修飾成功
//……
//但是,如果你的HTML是動態生成的,自動渲染就會失效
//因此你需要在相應的地方,執行下述方法來進行渲染
form.render();
});
三、更新渲染
有些時候,你的有些表單元素可能是動態插入的。這時 form 模塊 的自動化渲染是會對其失效的。雖然 layui 不支持雙向綁定機制,但沒有關係,你只需要執行 form.render(type, filter); 方法即可。
第一個參數:type,爲表單的 type 類型,可選。默認對全部類型的表單進行一次更新。可局部刷新的 type 如下表:
參數(type)值 | 描述 |
---|---|
select | 刷新select選擇框渲染 |
checkbox | 刷新checkbox複選框(含開關)渲染 |
radio | 刷新radio單選框框渲染 |
form.render(); //更新全部
form.render('select'); //刷新select選擇框渲染
//……
第二個參數:filter,爲 class="layui-form" 所在元素的 lay-filter="" 的值。你可以藉助該參數,對錶單完成局部更新。
<!-- HTML 示例 -->
<div class="layui-form" lay-filter="test1">
…
</div>
<div class="layui-form" lay-filter="test2">
…
</div>
<!-- JS 示例 -->
<script>
layui.use('form', function(){
var form = layui.form,
form.render(null, 'test1'); //更新 lay-filter="test1" 所在容器內的全部表單狀態
form.render('select', 'test2'); //更新 lay-filter="test2" 所在容器內的全部 select 狀態
//……
});
</script>
四、彈層中同樣的原理,需要更新渲染
<div id="layer-test" style="display: none;">
<form class="layui-form">
<div class="layui-form-item">
<label class="layui-form-label">複選框</label>
<div class="layui-input-block">
<input type="checkbox" name="CSDN" lay-filter="like" title="複選框一" value="dongsir">
<input type="checkbox" name="CSDN" lay-filter="like" title="複選框二" value="董先生">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">開關關</label>
<div class="layui-input-block">
<input type="checkbox" name="switch" lay-skin="switch" value="董輝">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">開關開</label>
<div class="layui-input-block">
<input type="checkbox" name="switch" checked lay-skin="switch" value="董先生的CSDN">
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="*">立即提交</button>
</div>
</div>
</form>
</div>
<script src="layui/layui.js"></script>
<script>
layui.use('form', function(){
var form = layui.form,
$ = layui.$;
//layer示例
layer.open({
type: 1,
title: ['董先生的CSDN博客'],
shade: 0.4,
area:['900px', '650px'],
content: $("#layer-test").html(),
success: function(layero, index){
form.render();
}
});
});
</script>