Reputation: 13
I'm using tag-it, and when I add values to it, I get a ul
like this
<ul id="mytags" class="tagit ui-widget ui-widget-content ui-corner-all">
<li class="tagit-choice ui-widget-content ui-state-default ui-corner-all tagit-choice-editable">
<span class="tagit-label">Android</span>
<a class="tagit-close"><span class="text-icon">×</span><span class="ui-icon ui-icon-close"></span></a>
</li>
<li class="tagit-choice ui-widget-content ui-state-default ui-corner-all tagit-choice-editable">
<span class="tagit-label">Java</span>
<a class="tagit-close"><span class="text-icon">×</span><span class="ui-icon ui-icon-close"></span></a>
</li>
<li class="tagit-new"><input type="text" class="ui-widget-content ui-autocomplete-input" autocomplete="off"></li>
</ul>
I'm trying to populate a select element from it
$("#tagQuery").tagit({
availableTags: ["c++", "java", "play", "scala", "ruby", "python", "c"],
afterTagAdded : function(event, ui) {
var option = document.createElement("option");
option.value = this.value;
option.text = this.name;
option.selected = 'selected';
select.appendChild(option);
},
afterTagRemoved : function(event, ui) {
select.removeChild(select.querySelector('[value="'+this.value+'"]'));
}
});
but the above code does not work as expected.
Link to JSFiddle: https://jsfiddle.net/LjomqhbL/16/
Upvotes: 1
Views: 171
Reputation: 20740
You can do it like following using append()
and remove()
. To add index as value declare availableTags
as a global variable. Hope this will help you.
var availableTags= ["c++", "java", "php", "javascript", "ruby", "python", "c"];
$("#tagQuery").tagit({
availableTags: availableTags,
afterTagAdded : function(event, ui) {
var arr=this.value.split(',');
var text = arr[arr.length - 1];
var index = availableTags.indexOf(text)+1;
$('select[name=tags]').append('<option selected value='+index+'>'+text+'</option>');
},
afterTagRemoved : function(event, ui) {
$('select[name=tags] option[value='+ui.tagLabel+']').remove();
}
});
Upvotes: 0
Reputation: 20199
ui.tagLabel
.var select = document.querySelector("select");
or var select = document.querySelector("select[name='tags']");
Try: https://jsfiddle.net/tamilcselvan/LjomqhbL/19/
Snippet:
var select = document.querySelector("select");
$("#tagQuery").tagit({
availableTags: ["c++", "java", "php", "javascript", "ruby", "python", "c"],
afterTagAdded : function(event, ui) {
var option = document.createElement("option");
console.log(ui);
option.value = ui.tagLabel;
option.text = ui.tagLabel;
option.selected = 'selected';
select.appendChild(option);
},
afterTagRemoved : function(event, ui) {
select.removeChild(select.querySelector('[value="'+ui.tagLabel+'"]'));
}
});
<link href="https://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/flick/jquery-ui.css" rel="stylesheet"/>
<link href="https://rawgit.com/aehlke/tag-it/master/css/jquery.tagit.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.12/jquery-ui.min.js"></script>
<script src="https://rawgit.com/aehlke/tag-it/master/js/tag-it.js"></script>
<input type="hidden" id="tagQuery" type="text" placeholder="tags" class="input-field"/><br>
<ul id="mytags"></ul><br><br>
<select name="tags" path="tags">
</select>
Edit:
add position of tag as value i.e <option value="2">Java</option>
instead of <option value="Java">Java</option>
this.value
return the tag string with seperator comma. eg java,javascript. So spilt the string and get the length of array use as option value.
var arr=this.value.split(',');
option.value = arr.length;
Upvotes: 1
Reputation: 783
As far as I could find... You want the last selection to be your selected value. So I just changed the Script a bit.
$("#tagQuery").tagit({
availableTags: ["c++", "java", "php", "javascript", "ruby", "python", "c"],
afterTagAdded : function(event, ui) {
$option = $("<option>");
$option.attr("value", ui.tagLabel);
$option.text(ui.tagLabel);
$("select[name='tags']").append($option);
$("select[name='tags']").val(ui.tagLabel);
},
afterTagRemoved : function(event, ui) {
$("select[name='tags']").find('option[value="'+ui.tagLabel+'"]').remove();
}
});
Upvotes: 0