Want to simply convert an input field into a tags element, in a easy customizable way, with good performance and smallest code footprint? You are in the right place my friend.
- supports whitelist (with native suggestions dropdown as-you-type)
- supports blacklists
- JS file is under 150 very readiable lines of code
- JS weights less than ~5kb
- SCSS file is ~2kb of highly readable and flexible code
- No other inputs are used beside the original, and its value is kept in sync
- Can paste in multiple values ("tag 1, tag 2, tag 3")
- Automatically disallow duplicate tags (vis "settings" object)
- Tags can be created by commas or by pressing the "Enter" key
- Tags can be trimmed via
hellipby givingmax-widthto thetagelement in yourCSS - Easily customized
- Exposed custom events
Simply run gulp in your terminal, from the project's path (Gulp should be installed first)
Lets say this is your markup, and you already have a value set on the input (which was pre-filled by data from the server):
<input name='tags' placeholder='write some tags' value='foo, bar,buzz'>
<textarea name='tags' placeholder='write some tags'>foo, bar,buzz</textarea>what you need to do to convert that nice input into "tags" is simply select your input/textarea and run tagify():
// vanilla component
var input = document.querySelector('input[name=tags]'),
tagify = new Tagify( input );
// with settings passed
tagify = new Tagify( input, {
duplicates: true,
whitelist: ['foo', 'bar'],
callbacks: {
add : onAddTag // calls an imaginary "onAddTag" function when a tag is added
}
});
// listen to custom tags' events such as 'add' or 'remove'
tagify1.on('remove', ()=>{
console.log(e, e.detail);
});$('[name=tags]')
.tagify()
.on('add', function(e, tagName){
console.log('added', tagName)
});Now markup be like:
<tags>
<tag>
<x></x>
<div><span title="css">css</span></div>
</tag>
<tag>
<x></x>
<div><span title="html">html</span></div>
</tag>
<tag>
<x></x>
<div><span title="javascript">javascript</span></div>
</tag>
<div>
<input list="tagsSuggestions3l9nbieyr" class="input placeholder">
<datalist id="tagsSuggestions3l9nbieyr">
<label> select from the list:
<select>
<option value=""></option>
<option>foo</option>
<option>bar</option>
</select>
</label>
</datalist><span>write some tags</span>
</div>
<input name="tags" placeholder="write some tags" value="foo, bar,buzz">
</tags>| Name | Info |
|---|---|
| destroy | if called, will revert the input back as it was before Tagify was applied |
| removeAllTags | removes all tags and rests the original input tag's value property |
| Name | Info |
|---|---|
| add | A tag has been added |
| remove | A tag has been removed |
| duplicate | A tag has been added and found to be a duplicate of existing one |
| maxTagsExceed | Number of tags exceeds the allowed quantity and the exceed tags were denied (removed) |
| blacklisted | A tag which is in the blacklist has been added and denied (removed) |
| notWhitelisted | A tag which is not in the whitelist has been added and denied (removed) |
| Name | Type | Default | Info |
|---|---|---|---|
| delimiters | String | "," | [regex] split tags by any of these delimiters. Example: Space or Coma - ", " |
| pattern | String | "" | Validate the input by REGEX pattern (can also be applied on the input itself as an attribute) |
| duplicates | Boolean | false | (flag) should duplicate tags be allowed or not |
| enforeWhitelist | Boolean | false | should ONLY use tags allowed in whitelist |
| autocomplete | Boolean | true | show native suggeestions list, as you type |
| whitelist | Array | [] | an array of tags which only they are allowed |
| blacklist | Array | [] | an array of tags which aren't allowed |
| callbacks | Object | {} | exposed callbacks object to be triggered on events: 'add' / 'remove' tags |
| maxTags | Number | Infinity | max number of tags |
| suggestionsMinChars | Number | 2 | minimum characters to input which shows the sugegstions list |
