当我们点击BACKSPACE/DEL/do CUT时,IE9中的oninput不会触发

Nam*_*ame 16 javascript html5 internet-explorer-9

我们使用什么最干净的解决方案来克服当我们点击BACKSPACE/DEL/do CUT时IE9不会触发输入事件的问题?

最干净的我的意思是代码不会发臭.

Buz*_*nas 9

我为退格/删除/剪切开发了IE9 polyfill.

(function (d) {
  if (navigator.userAgent.indexOf('MSIE 9') === -1) return;

  d.addEventListener('selectionchange', function() {
    var el = d.activeElement;

    if (el.tagName === 'TEXTAREA' || (el.tagName === 'INPUT' && el.type === 'text')) {
      var ev = d.createEvent('CustomEvent');
      ev.initCustomEvent('input', true, true, {});
      el.dispatchEvent(ev);
    }
  });
})(document);
Run Code Online (Sandbox Code Playgroud)

出于某种原因,在IE9中,当您在文本字段内删除时,selectionchange会触发该事件.

所以,你唯一需要做的是:检查选择的活动元素是否是输入,然后我告诉元素调度input事件,就像它应该做的那样.

将代码放在页面的任何位置,所有删除操作现在都会触发input事件!


Joh*_*ooy 2

你可以尝试html5Forms (以前的 html5widgets)

\n\n
\n

由于我讨厌 COBOL,因此我决定将我的 html5Widgets 库更新为:

\n\n
    \n
  1. 为不\xe2\x80\x99t支持的浏览器添加对oninput的支持(例如\n IE7和8)
  2. \n
  3. 当在任何输入节点内按下退格键和删除键时,强制 IE9 在输入时触发表单\xe2\x80\x99s。
  4. \n
  5. 当在任何输入节点上触发 cut 事件时,强制 IE9 触发 form\xe2\x80\x99s oninput。
  6. \n
\n
\n\n

是添加此支持的提交的链接

\n