我正在以典型的“发布帖子”形式使用物化芯片,其中我将芯片用于标签字段。都好。
现在,当我在几乎相同的“编辑帖子”屏幕中执行相同操作时,会有所不同,我从数据库中调用帖子已具有的标签,然后将其插入插入芯片的元素中。
我已经解决了这个想法的几个问题,但是当我要删除单击关闭图标的芯片时,不管它是预先存在的标签还是新生成的标签,都行不通。
如果我不使用预先存在的标签/芯片填充芯片的容器,则不会发生此行为。所以我有2个选择:
第二个选项的问题是我不知道如何使该方法在我的代码中起作用。
选项1
<div id="chips1" class="chips chips-placeholder input-field">
@foreach($tags as $tag)
<div class="chip" data-tag="{{$tag}}" tabindex="0">{{$tag}}
<i class="material-icons close">close</i>
</div>
@endforeach
</div>
选项2(不使用foreach填充div)
<div id="chips1" class="chips chips-placeholder input-field">
</div>
和JS
/* I initialize the chips with a onChipAdd method
and onDelete method to keep the variable updated */
var val = [];
$('#chips1').chips({
placeholder: 'Etiquetas...',
secondaryPlaceholder: '+Etiqueta',
onChipAdd: function () {
val = this.chipsData;
console.log(val);
},
onChipDelete: function() {
val = this.chipsData;
console.log(val);
}
});
/* ***************************************** */
/* Here populate the hidden input that is going to deliver the
data with the pre-existing chips of Option 1 */
var chipsArr = [];
var chipis = $('#chips1 div.chip');
for (let index = 0; index < chipis.length; index++) {
chipsArr.push($(chipis[index]).data('tag'));
}
$('#chips-values').val(JSON.stringify(chipsArr));
/* ***************************************** */
/* Here i push to the array the newly added tags with the val variable */
$('#publishSubmit').on('click', function (e) {
e.preventDefault();
for (let index = 0; index < val.length; index++) {
chipsArr.push(val[index].tag);
}
$('#chips-values').val(JSON.stringify(chipsArr));
console.log($('#chips-values').val());
$('form#postPublish').submit();
});
答案 0 :(得分:1)
我知道您的问题已经存在了一段时间,但是也许可以帮助您。我遇到了完全相同的问题,并按以下步骤解决了这个问题:
我如下创建了筹码容器:
<div id="chips" class="chips-placeholder"></div>
<div id="chips_inputcontainer"></div>
然后,我为“ chips_inputcontainer”内部的数据库中的每个现有芯片创建了隐藏的输入。
例如这样的例子:
<div id="chips_inputcontainer">
<?php foreach($chips as $chip): ?>
<input type='hidden' name='chip[previous][<?php echo $chip['id'] ?>]' value='<?php echo $chip['text'] ?>'>
<?php endforeach; ?>
</div>
最后,我使用以下JavaScript片段初始化了芯片输入:
<script>
$('#chips').chips({
placeholder: 'Enter a tag',
secondaryPlaceholder: '+Tag',
onChipAdd: function(e, chip){
$("#chips_inputcontainer").append("<input type='hidden' name='chip[new][]' value='" + chip.innerHTML.substr(0, chip.innerHTML.indexOf("<i")) + "'>");
},
onChipDelete: function(e, chip){
$('#chips_inputcontainer input[value="' + chip.innerHTML.substr(0, chip.innerHTML.indexOf("<i")) + '"]').val('**deleted**');
},
data: [
<?php foreach($chips as $chip): ?>
{tag: '<?php echo $chip['text'] ?>'},
<?php endforeach; ?>
],
});
</script>
每次添加新芯片时都会创建此片段,其中包含具有必要数据的隐藏输入。 每次删除芯片时,隐藏输入字段的值都设置为“已删除”
所以我知道:
我希望这会对您有所帮助。