Прежде чем перейти к решению, сообщите нам, почему он показывает эту ошибку. Если вы знаете проблему, стоящую за этой проблемой, мы можем легко исправить эту ошибку.
Причина 1: Наиболее распространенной причиной этой проблемы является то, что мы пытаемся установить другую битовую версию, то есть 64-битную или 32 разрядной версии программного обеспечения. Это может быть либо Eclipse, либо Java.
Решение: проверьте, какая версия операционной системы вы используете. Убедитесь, что вы загрузили ту же версию Eclipse, а также ту же версию программного обеспечения Java.
Причина 2: Ошибка конфигурации в файле Eclipse.ini
Решение. Добавьте в конец файла Eclipse.ini эту строку «-vm, а затем путь к вашему java sdk». например: -vm C: \ Program Files \ Java \ jdk1.7.0_71 \ bin \ javaw.exe
Причина 3: Специальные символы (#,!, @) в каталоге установки Eclipse.
Решение: убедитесь, что у вас нет специальных символов.
Причина 4: вы дважды добавили путь JAVA в системную переменную PATH, и оба пути различны.
Решение: удалите один неправильный / другой путь JAVA из системной переменной PATH.
Причина 5: Возможно, вы используете последнюю версию Eclipse, но вы можете использовать неправильную версию или неподдерживаемую версию Java Virtual Machine (JVM).
Решение. Чтобы проверить, какая версия java вы используете открытую командную строку, нажав клавишу «win + R» и введите cmd и нажмите «Ввод». Теперь в этой консоли введите команду Java -version, чтобы узнать версию java. Теперь изучите, поддерживает ли eclipse эту версию или нет. Или вы можете открыть папку «readme» в папке Eclipse и открыть файл readme_eclipse.html, чтобы посмотреть, какую версию он поддерживает.
Я знаю, что этот ответ приходит слишком поздно, но вот плагин, который реализует selectStart для всех типов элементов для большинства браузеров (старый и новый):
https: //github.com/adelriosantiago/caret
Я обновил его для решения проблемы type="number"
с помощью ответа @ncohen.
Есть один способ, которым вы можете выполнить это в Chrome (и, возможно, в некоторых других браузерах, но Chrome - большой преступник). Используйте window.getSelection()
для извлечения объекта выделения из текущего ввода, а затем тест расширяет выбор назад (или вперед) и видит, изменяется ли значение toString()
выбора. Если это не так, курсор находится в конце ввода, и вы можете перейти к следующему входу. Если это так, вы должны затем отменить операцию, чтобы отменить выбор.
s = window.getSelection();
len = s.toString().length;
s.modify('extend', 'backward', 'character');
if (len < s.toString().length) {
// It's not at the beginning of the input, restore previous selection
s.modify('extend', 'forward', 'character');
} else {
// It's at the end, you can move to the previous input
}
Я получил эту идею из этого ответа SO: https://stackoverflow.com/a/24247942
Это происходило для нас при использовании JQuery Numeric Plugin версии 1.3.x, поэтому, обернув selectionStart
и selectionEnd
с помощью try...catch{}
, мы смогли подавить ошибку.
Источник: https://github.com/joaquingatica/jQuery-Plugins/commit/a53f82044759d29ff30bac698b09e3202b456545
В настоящее время единственными элементами, которые позволяют безопасно выбирать текст, являются:
<input type="text|search|password|tel|url">
, как описано в: whatwg: selectionStart attribute .
Вы можете также прочитайте документацию для интерфейса HTMLInputElement , чтобы более подробно рассмотреть элементы ввода.
Чтобы преодолеть эту «проблему» безопасно, на данный момент лучше всего работать с <input type="text">
и примените маску / ограничение, которые принимают только числа. Существует ряд плагинов, которые удовлетворяют требованиям:
Здесь вы можете увидеть живое демо одного из предыдущих плагинов:
Если вы хотите безопасно использовать selectionStart
, вы можете проверить те элементы, которые его поддерживают (см. атрибуты типа входа )
// Fix: failed to read the 'selectionStart' property from 'HTMLInputElement'
// The @fn parameter provides a callback to execute additional code
var _fixSelection = (function() {
var _SELECTABLE_TYPES = /text|password|search|tel|url/;
return function fixSelection (dom, fn) {
var validType = _SELECTABLE_TYPES.test(dom.type),
selection = {
start: validType ? dom.selectionStart : 0,
end: validType ? dom.selectionEnd : 0
};
if (validType && fn instanceof Function) fn(dom);
return selection;
};
}());
// Gets the current position of the cursor in the @dom element
function getCaretPosition (dom) {
var selection, sel;
if ('selectionStart' in dom) {
return _fixSelection(dom).start;
} else { // IE below version 9
selection = document.selection;
if (selection) {
sel = selection.createRange();
sel.moveStart('character', -dom.value.length);
return sel.text.length;
}
}
return -1;
}
// If the DOM element does not support `selectionStart`,
// the returned object sets its properties to -1.
var box = document.getElementById("price"),
pos = getCaretPosition(box);
console.log("position: ", pos);
Вышеприведенный пример можно найти здесь: jsu.fnGetCaretPosition ()
мы не можем просто отменить проверку элемента, чтобы просто включить поддерживаемые элементы, например:
if (deviceIsIOS &&
targetElement.setSelectionRange &&
(
targetElement.type === 'text' ||
targetElement.type === 'search' ||
targetElement.type === 'password' ||
targetElement.type === 'url' ||
targetElement.type === 'tel'
)
) {
вместо этого:
if (deviceIsIOS &&
targetElement.setSelectionRange &&
targetElement.type.indexOf('date') !== 0 &&
targetElement.type !== 'time' &&
targetElement.type !== 'month'
) {
В качестве рабочего процесса входной тип type="tel"
обеспечивает очень похожую функциональность type="number"
в Chrome и не имеет этого ограничения (как указал Патрис).
Я получил эту ошибку на веб-сайте angularjs.
Я создал атрибут пользовательских данных на входе и также использовал ng-blur (с $ event).
Когда мой callback был вызван. Я пытался получить доступ к значению «data-id», например:
var id = $event.target.attributes["data-id"]
И это должно быть так:
var id = $event.target.attributes["data-id"].value
похоже, слишком много об этой ошибке, поэтому я оставляю это здесь.
Я нашел простую обходную процедуру (проверенную на Chrome) для setSelectionRange()
. Вы можете просто изменить type
на text
, прежде чем использовать setSelectionRange()
, а затем изменить его на number
.
Вот простой пример с jquery, который позиционирует каретку в позиции 4 в количестве ввода каждый раз, когда вы нажимаете на вход (добавьте более 5 цифр на вход, чтобы увидеть поведение)
email
(вот как я оказался на этой странице, задаваясь вопросом, почему setSelectionRange()
работал в IE11 (!), А не в Chrome).
– jdunning
28 April 2018 в 20:59
Выбор разрешен только с текстом / поиском, URL-адресом, телефоном и паролем . Вероятная причина, по которой выбор был отключен для ввода номера типа, заключается в том, что на некоторых устройствах или при некоторых обстоятельствах (например, когда ввод был представлен как короткий list
), может не быть каретки. Единственное решение, которое я нашел, это изменить тип ввода на текст (с соответствующим шаблоном для ограничения ввода). Я все еще ищу способ сделать это без изменения типа ввода и опубликую обновление, когда найду что-нибудь.
<input type="number"/>
как текстовое поле, которое устанавливает экранную клавиатуру по умолчанию (если доступно) на цифровую клавиатуру, но все же визуализирует поле как «текстовый ввод», поле. Любая существующая / будущая попытка добавить калькулятор или аналогичную функцию манипулирования значения для поля теперь бесполезна, если мы не отменим это поле и не испортим работу пользователя.
– scunliffe
25 February 2014 в 23:34
Хотя проблема с устаревшими событиями для этого типа поля формы может быть по-прежнему актуальной, насколько я вижу, этот вид поля можно прослушать с событием «change», как обычно.
Я пришел к этой статье здесь, ища ответ на вопрос о событиях для этого типа поля, но, проверяя его, я обнаружил, что могу просто полагаться на событие «change», как упоминалось.