antInputDirective.js 1.1 KB

12345678910111213141516171819202122232425262728293031
  1. function onCompositionStart(e) {
  2. e.target.composing = true;
  3. }
  4. function onCompositionEnd(e) {
  5. // prevent triggering an input event for no reason
  6. if (!e.target.composing) return;
  7. e.target.composing = false;
  8. trigger(e.target, 'input');
  9. }
  10. function trigger(el, type) {
  11. var e = document.createEvent('HTMLEvents');
  12. e.initEvent(type, true, true);
  13. el.dispatchEvent(e);
  14. }
  15. export function addEventListener(el, event, handler, options) {
  16. el.addEventListener(event, handler, options);
  17. }
  18. var antInput = {
  19. created: function created(el, binding) {
  20. if (!binding.modifiers || !binding.modifiers.lazy) {
  21. addEventListener(el, 'compositionstart', onCompositionStart);
  22. addEventListener(el, 'compositionend', onCompositionEnd);
  23. // Safari < 10.2 & UIWebView doesn't fire compositionend when
  24. // switching focus before confirming composition choice
  25. // this also fixes the issue where some browsers e.g. iOS Chrome
  26. // fires "change" instead of "input" on autocomplete.
  27. addEventListener(el, 'change', onCompositionEnd);
  28. }
  29. }
  30. };
  31. export default antInput;