Возможность перемещения указателя по <div> - ExtJS
Есть <div> элемент с определенным текстом.
Как выполнить перемещение указателя к соответствующей букве <div> в ExtJS? Пример на Javascript не работает в ExtJS:
<html>
<head>
<title>set cursor position N10</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script type="text/javascript">
function focusPackageCode(id) {
var node = document.querySelector('div#' + id + 'word');
node.focus();
var textNode = node.firstChild;
var caret = 10;
var range = document.createRange();
range.setStart(textNode, caret);
range.setEnd(textNode, caret);
var sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
}
</script>
</head>
<body>
<div id="packagecode1word" name="packagecode1word" contenteditable="true">set cursor position N10</div>
<p align="center" onClick="focusPackageCode('packagecode1');">Set</p>
</body>
</html>
Как видите функция работает в Javascript но не в ExtJS. Когда я кликаю на кнопку "Set" указатель в "<div>" перемещается к букве номер 10. Но когда пытаюсь выполнить эту функцию в ExtJS не работает: increaseIndex: 0, this.increaseIndex++;
nodeScriptFunction.appendChild(
doc.createTextNode(
'function focusPackageCode' + this.increaseIndex +
"(id){var node = document.querySelector('div#'+id+'word');node.focus();var textNode = node.firstChild;var caret = 10;var range = document.createRange();range.setStart(textNode, caret);range.setEnd(textNode, caret);var sel = window.getSelection();sel.removeAllRanges();sel.addRange(range);}"
)
);
nodeName.setAttribute('onClick','focusPackageCode' + this.increaseIndex + '(this.id);');
nodeText.setAttribute('id','packagecode' + this.increaseIndex + 'word');
nodeText.setAttribute('contenteditable','true');
Когда я кликаю на кнопку 'onClick' появляется такая ошибка: Цитата:
|
Я не вижу в вашем коде ничего, относящегося к Ext JS. Скорее всего, опечатка где-нибудь закралась, или ещё что-нибудь такое же тривиальное. Поставьте прерывание в начале функции focusPackageCode и пошагово смотрите, что содержится в переменной textNode и почему браузер плюётся слюной.
Заодно надеваю свою пророческую шапку и предрекаю вам много багов, весёлых и разных. Ваш код предполагает, что фокусирование элемента это синхронная операция; так вот, это не так. Точнее, не всегда и не везде так. (IE! IE! кричали возбуждённые пионеры) |
Спасибо за ответ. Буду двигаться в этом направлении. Но я показал вам одну версию в JavaScript а вторую в ExtJS. Только сокращенную версию. Как видите я добавляю функцию JavaScript в сам ExtJS а также как параметер прерывание OnClick. ExtJS код начинается после предложения: "Но когда пытаюсь выполнить эту функцию в ExtJS не работает:"
|
Я исправил эту проблему. Все очень было просто.
|
В следующий раз воспользуйтесь, пожалуйста, песочницей.
|
| Часовой пояс GMT +3, время: 05:36. |