Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <title>Tagify - async validation</title>
  <meta name="description" content="Tagify">
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <meta name="author" content="Yair Even Or">
  
  <script src="https://unpkg.com/@yaireo/tagify"></script>
  <script src="https://unpkg.com/@yaireo/tagify@3.1.0/dist/tagify.polyfills.min.js"></script>
  <link href="https://unpkg.com/@yaireo/tagify/dist/tagify.css" rel="stylesheet" type="text/css" />
  
  <style>
    .tagify+input{
      display: block !important;
      position: static !important;
      transform: none !important;
      width: 100%;
      margin-top: 1em;
      padding: .5em;
    }
  </style>
</head>
<body>
  
  <input placeholder="type tags">
  
</body>
</html>
 
body{  
  font: 13px arial;
}
/* method 1 */
.tagify__tag + .tagify__input::before{ opacity:0; }
/* method 2 */
.tagify:not(.tagify--noTags){
  --placeholder-color: transparent;
  --placeholder-color-focus: transparent;
}
 
// Async validation example:
// https://gist.github.com/yairEO/ed5da9df0144fdbd2d214b4760406443
const mockAjax = (timeout => (RES, duration) => {
  clearTimeout(timeout); // abort last request
  return new Promise((resolve, reject) => timeout = setTimeout(resolve, duration || 0, RES))
})()
var input = document.querySelector('input')
var tagify = new Tagify(input, {
  dropdown: {
    maxItems :0, 
    enabled: 0
  },
   whitelist: ["a", "aa", "aaa", "b", "bb", "ccc"]
})
const onAddTag = async ({detail: {data, tag}}) => {
  tagify.tagLoading(tag, true)
  
  // mock server validation
  const isValid = await mockAjax(Math.random() > .5, 1000);
  tagify.tagLoading(tag, false)
  
  if( !isValid )
    tagify.replaceTag(tag, {...data, __isValid: "Custom validation error"})
}
tagify.on('add', onAddTag)
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
yairEOpro
0viewers