在应用程序中,我输入了格式化输入数据和验证。所有这些进程都挂在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);
事件还有一些其他逻辑,因此我不会将其更改为另一个。但是存在一些问题。
在输入中添加字符时 - 位置设置效果很好,但是当我开始删除它时,每次按退格/删除插入符都会移动到行的开头。
代码段:
<input type='text' id='input' />
http://www.search.com/?gd=XXXX&ISID=__PARAM__
有什么想法吗?