坑(八)—— LayUI框架中append新的元素的問題


LayUI框架中append新的元素的問題

復現

  • 第二個下拉框是由第一個點擊+生成

    實現上述效果js代碼如下:

    <body>
        <style>
        .item{
            position:absolute;
            right:-50px;
            top:0px;
        }
    	</style>
    	<form class="layui-form" method='post' action="" enctype="multipart/form-data" id="form">
            <div class="layui-form-item">
                {% csrf_token %}
                <label>探測協議與端口:</label>
                <div id="outer">
                    <div class="layui-form-item" style="width:90%;position:relative">
                        <div class="layui-form-item item">
                            <button type="button" class="layui-btn layui-btn-primary layui-btn-sm" onclick="add(this)">
                                <i class="layui-icon">&#xe654;</i>
                            </button>
                        </div>
                        <div class="layui-form-item">
                            <select name="protocol">
                                <option value="0">全部</option>
                                <option value="1">111</option>
                                <option value="2">222</option>
                            </select>
                        </div>
    
                        <div class="layui-form-item">
                            <input type="text" name="port" class="form-control" placeholder="探測目標的端口為非默認端口,可選填該項"/>
                        </div>
    
                    </div>
                </div>
    
            </div>
            <div class="layui-row">
                <div class="layui-col-xs6 layui-col-xs-offset5">
                    <button id="submit" type="button" class="layui-btn layui-btn-radius" lay-submit lay-filter="form_post">立即提交</button>
                </div>
            </div>
        </form>
    </body>
    
    <script>
    	function add(ev) {
    
        var copyer=$(ev).parent().parent().clone();
        copyer.find(":text").val("");
    
        $("#outer").append(copyer);
    </script>
    

 

 

原因

Layui會對selectcheckboxradio等原始元素隱藏,從而進行美化修飾處理。但這需要依賴於form組件,所以必須加載 form,並且執行一個實例。導航的Hover效果、Tab選項卡等同理(它們需依賴 element 模塊)

  • 所以當新添加這些元素時需要對頁面表單元素重新渲染一下

 

 

解決方案

在add函數中添加以下代碼

layui.use('form', function(){
 var form = layui.form; //只有執行了這一步,部分表單元素才會自動修飾成功
 
 //……
 
 //但是,如果你的HTML是動態生成的,自動渲染就會失效
 //因此你需要在相應的地方,執行下述方法來手動渲染,跟這類似的還有 element.init();
 form.render();
});

 
 

完整code

<script>
	function add(ev) {

    var copyer=$(ev).parent().parent().clone();
    copyer.find(":text").val("");

    $("#outer").append(copyer);
        
    layui.use('form', function(){
        // 重新渲染form
        var form = layui.form; 
        form.render();
    });
</script>

 

  • 修復后效果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM