添加新行时,jquery repeater内部的colorpicker不起作用

时间:2017-03-21 17:57:05

标签: javascript jquery html twitter-bootstrap repeater

我使用与引导程序兼容的颜色选择器的第三方插件,在转发器中添加了此选择器字段,因此我可以添加行并删除 我启动插件,如下所示

$('.color-picker').minicolors();
$(".mt-repeater").repeater();

但颜色选择器字段不适用于添加的行,它仅适用于第一行。 检查codepen上的演示尝试点击添加行按钮,然后点击颜色选择器https://codepen.io/anon/pen/ZexeYj 我该如何处理这个问题?当我尝试在添加新行后再次调用minicolors时出现问题。

1 个答案:

答案 0 :(得分:0)

  

但颜色选择器字段不适用于添加的行,它仅适用于第一行。

这是因为颜色选择器在下一行上被部分初始化....

根据jquery.repeater文档,您必须处理 show 选项回调:

$(".mt-repeater").repeater({
    show: function () {
        $(this).find('.color-picker').minicolors('destroy').minicolors();
        $(this).show();  //  or $(this).slideDown();
    }
});

在此方法中,您可以销毁当前的minicolors并初始化一个新的。

工作片段:



$('.color-picker').minicolors();


$(".mt-repeater").repeater({
    show: function () {
        $(this).find('.color-picker').minicolors('destroy').minicolors();
        $(this).show();
    }
});

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery-minicolors/2.2.4/jquery.minicolors.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.6/css/bootstrap.min.css">

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-minicolors/2.2.4/jquery.minicolors.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.repeater/1.2.1/jquery.repeater.min.js"></script>


<div class="form-group mt-repeater">
    <div class="col-sm-4">
        <div data-repeater-list="group-c">
            <div data-repeater-item class="mt-repeater-item">
                <div class="row mt-repeater-row">
                    <div class="col-md-5">
                        <input type="text" placeholder="" class="form-control"/>
                    </div>
                    <div class="col-md-2">
                        <input type="hidden" class="form-control color-picker" value="#db913d">
                    </div>
                    <div class="col-md-3">
                        <input type="text" class="form-control icons-picker">
                    </div>
                    <div class="col-md-2">
                        <a href="javascript:;" data-repeater-delete class="btn btn-danger mt-repeater-delete">X
                        </a>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="col-sm-9 col-sm-offset-3">
        <a href="javascript:;" data-repeater-create class="btn btn-info mt-repeater-add">
            <i class="fa fa-plus fa-fw fa-lg"></i> Add row</a>
    </div>
</div>
&#13;
&#13;
&#13;

另一种方法是将initEmpty选项设置为true:

  

从一个空的转发器列表开始。设置你的第一个(也是唯一的)   &#34;数据中继器项&#34; with style =&#34; display:none;&#34;并通过   以下配置标志

摘录:

&#13;
&#13;
$(".mt-repeater").repeater({
    initEmpty: true,
    show: function () {
        $(this).find('.color-picker').minicolors();
        $(this).slideDown();
    }
});

// create the first group
$('[data-repeater-create]').trigger('click');  
&#13;
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery-minicolors/2.2.4/jquery.minicolors.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.6/css/bootstrap.min.css">

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-minicolors/2.2.4/jquery.minicolors.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.repeater/1.2.1/jquery.repeater.min.js"></script>

<div class="form-group mt-repeater">
    <div class="col-sm-4">
        <div data-repeater-list="group-c">
            <div data-repeater-item class="mt-repeater-item" style="display:none;">
                <div class="row mt-repeater-row">
                    <div class="col-md-5">
                        <input type="text" placeholder="" class="form-control"/>
                    </div>
                    <div class="col-md-2">
                        <input type="hidden" class="form-control color-picker" value="#db913d">
                    </div>
                    <div class="col-md-3">
                        <input type="text" class="form-control icons-picker">
                    </div>
                    <div class="col-md-2">
                        <a href="javascript:;" data-repeater-delete class="btn btn-danger mt-repeater-delete">X
                        </a>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="col-sm-9 col-sm-offset-3">
        <a href="javascript:;" data-repeater-create class="btn btn-info mt-repeater-add">
            <i class="fa fa-plus fa-fw fa-lg"></i> Add row</a>
    </div>
</div>
&#13;
&#13;
&#13;