请帮助我,我想从MaterializeCSS芯片中选择数据,但我不知道,如何。 我想要值表单输入(类型:隐藏)包含来自芯片的id数据。
var my_data = {
"0":"Apple",
"1":"Microsoft",
"2":"Google"
}
var myConvertedData = {};
$.each(my_data, function(index, value) {
myConvertedData[value] = null;
});
$('.chips-autocomplete').material_chip({
autocompleteData: myConvertedData
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.98.0/css/materialize.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.98.0/js/materialize.min.js"></script>
<div class="row">
<div class=" col s12">
<form method="POST" action="#">
<div class="chips chips-autocomplete" id="optionS"></div>
<input class="browser-default" type="text" name="val_selected" placeholder="form hidden for get item selected #options">
<button type="submit" class="btn btn-large" disabled>Save
</button>
</form>
</div>
</div>
这是我的代码:Fiddle
答案 0 :(得分:0)
PS: 我不再在这里使用JQuery,因为它不再是依赖项。
JS:
document.addEventListener('DOMContentLoaded', function() {
document.getElementById("Genre").value = null; //making sure value is nulled when the browser hits back button and gets back to this page.
var elems = document.querySelectorAll('.chips');
var chips_genre = M.Chips.init(elems, {
autocompleteOptions: {
data: {
'Romance': null, //Your Pickers
'Action': null,
'Adventure': null,
'Comedy': null,
'Crime': null,
'Drama': null,
'Fantasy': null,
'Historical': null,
'Fiction': null,
'Mystery': null,
'Thriller': null,
'Satire': null,
'Science Fiction': null,
},
limit: 5,
minLength: 1 //customise this value according to your requirement
}
});
document.getElementById("add_btn").addEventListener("click", function(event){
chips_genre.forEach(function(entry) {
console.log(JSON.stringify(entry.chipsData));
var dat = entry.chipsData;
dat.forEach(function (tags){
document.getElementById("Genre").value += tags.tag + ","; //using "," as delimiter for multiple tags
});
document.getElementById("Genre").value += null; //adding null to the end.
});
});
});
表格:
<div class="chips chips-genre input-field">
<input class="white-text" id="Genre_field">
</div>
<input type="hidden" id="Genre" name="Genre_Field">
<button type="submit" id="add_btn" class="btn">ADD</button>
答案 1 :(得分:0)
我不明白您对“ id data”的含义,但是我遇到了同样的问题,现在已经解决,并将自动完成芯片传递给POST方法(也可以使用GET方法)。
这是我的HTML表单(目标代码,表单很长):
<div class="input-field col s12">
<input type="text" name="shadow_alb_arts" id="shadow_alb_arts" value="">
</div>
<div class="chips chips-arts chips-placeholder input-field col s12" id="par_alb_arts">
<input type="text" id="album_artists" name="album_artists[]">
</div>
输入#shadow_alb_arts
将包含我将通过POST传递的ID Artist(因为#album_artists
被传递为空白),并且使用jQuery,我将用定界符将所有Artist ID合并。
此文本区域将被隐藏,因此最终用户将看不到代码中的输入内容,可以对其进行测试并查看结果。
这是jQuery代码:
$('.chips-arts').chips(
{
autocompleteOptions: {
data: {
//<?php echo implode(",\n", $arts); ?>
// Your data, I'll use this string format: artist_id) Artist Name (start_year-end_year) from country_name
},
limit: Infinity,
minLength: 1,
},
placeholder: 'Artist name',
secondaryPlaceholder: '+ Artist',
onChipAdd: function(e) {
var final_ids = "";
$( "#par_alb_arts > div.chip" ).each(function() {
var chip_selected = $(this).text();
var author = $.trim(chip_selected);
var id_author = " " + author.split(")")[0] + " ";
final_ids = final_ids + id_author;
});
$("#shadow_alb_arts").val(final_ids);
}
},
);
});
要清楚:
onChipAdd: function(e)
,当用户选择一个芯片自动完成的值(是onChipAdd
而不是onChipSelect
时,我们将输入,因为当用户选择一个值(或按Enter)时,将添加新的芯片)。
var final_ids = "";
是存储所有选定ID艺术的最终字符串
{$( "#par_alb_arts > div.chip" ).each(function()
,这是带有子级选择(父级>子级)的jQuery foreach,当发生onChipAdd时,将使用类chip
创建新的div,在这种情况下,我将从芯片标签中获取文本并进行解析字符串(自动完成部分中的所有值都使用特定的模式,因为稍后我将阅读文本并正确获取ID)
$("#shadow_alb_arts").val(final_ids);
重新编写(隐藏)带有艺术家ID的输入文本,当最终用户提交表单时,此文本输入将包含值。