在格式化值后删除字符时在IE9中设置插入位置

时间:2016-07-11 09:20:07

标签: javascript internet-explorer caret

在应用程序中,我输入了格式化输入数据和验证。所有这些进程都挂在input事件侦听器上。 var elem = document.getElementById('input'); elem.addEventListener('input', function(){ format(elem); set(elem, 5); }) function format(element) { element.value = element.value.split(' ').join('').replace(/\B(?=(.{3})+\b)/g, " "); } // `set` method from https://github.com/kudago/caret-position function set(input, start, end) { if (end === undefined) { end = start; } if (input.setSelectionRange) { input.focus(); input.setSelectionRange(start, end); } else { var range = input.createTextRange(); range.collapse(true); range.moveEnd('character', start); range.moveStart('character', end); range.select(); } }; // modified https://github.com/buzinas/ie9-oninput-polyfill (function (doc) { if (navigator.userAgent.indexOf('MSIE 9') === -1) return; var elements = [], values = []; doc.addEventListener('selectionchange', function(e) { var activeElement = doc.activeElement; if (activeElement.tagName === 'TEXTAREA' || (activeElement.tagName === 'INPUT' && activeElement.type === 'text')) { var index = elements.indexOf(activeElement), element = elements[index] || elements.push(activeElement); if (element.value !== values[index]) { var event = doc.createEvent('CustomEvent'); event.initCustomEvent('input', true, true, undefined); values[index] = element.value; element.dispatchEvent(event); } } }); })(document);事件还有一些其他逻辑,因此我不会将其更改为另一个。但是存在一些问题。

在输入中添加字符时 - 位置设置效果很好,但是当我开始删除它时,每次按退格/删除插入符都会移动到行的开头。

Jsfiddle

代码段:

<input type='text' id='input' />
http://www.search.com/?gd=XXXX&ISID=__PARAM__

有什么想法吗?

0 个答案:

没有答案