Почему курсор перескакивает в начало строки
Перейти к содержимому

Почему курсор перескакивает в начало строки

  • автор:

Почему курсор переходит в начало строки в моем компоненте?

Прошу прощения за «простыню», специально ничего не убирал.
Собственно проблема — при вводе данных в элемент с contentEditable курсор после каждого ввода данных перескакивает в начало строки. Проблема известная, вот к примеру та же история, хоть и 6-летней давности вопрос.
Насколько я понял, проблема в изменении стейта и ререндерах. Окей. Я решил вопрос использованием рефов вместо стейта(костыли, откровенно говоря). Еще нормально работает, если повесить обработчик на onBlur вместо onInput.
Вопрос вот в чем — почему тогда в этом примере не происходит перескакивания курсора?
Есть ли аксакалы которые сталкивались с чем-то подобным?

  • Вопрос задан 27 янв.
  • 81 просмотр

Перескакивает курсор в начало строки, в строке поиска динамического списка

Есть самописная конфигурация по учету товаров в рознице. Для справочника товаров через дополнение формы добавлена строка поиска динамического списка. Проблема в следующем: иногда при поиске(наборе текста), после нескольких введенных символов, курсор уходит в начало строки. Например, пользователь хочет найти «товар1», после ввода «тов» курсор переходит в начало строки, а пользователь не видя этого продолжает печатать и получается в итоге «ар1тов». Случается такое не всегда. При попытках увидеть эту проблему воочию, случилось 1 раз за час. Тестирование и исправление не помогает, удаление и восстановление индексов поиска тоже. База используется в файловом режиме. Программ типа punto switcher не установлено. Пока думается, что виноват код конфигурации. Только непонятно, что именно не так. Нужна помощь по решению этой проблемы.

Версия приложения: от 8.3.8.1652 до 8.3.8.2027

По конфигурации:
используется внешний вид «такси» и «8.2»
В справочнике товаров есть событие «ПриАктивизацииСтроки» в котором следующий код.

ТекДан = Элементы.Список.ТекущиеДанные; Если ТекДан <> Неопределено Тогда Если Строка(ТекДан.Штрихкод)<>СтарыеТекДан Тогда //Количество в упаковках Делимость = ТекДан.Делимость; КО = ТекДан.КоличествоОстаток; Цена = ТекДан.Цена; Если ДелимостьНеопределено Тогда Для каждого стрС Из ДанСк Цикл СтрокаСкидки = Скидки.Добавить(); СтрСтрукт = стрС.Значение; СтрокаСкидки.Количество = СтрСтрукт.Количество; СтрокаСкидки.Процент =СтрСтрукт.Процент; СтрокаСкидки.Скидка =СтрСтрукт.Скидка; Если СтрСтрукт.Скидка= "Централизованная" Тогда ВключитьКнопкуПечатиЦенникаСоскидкой=Истина; КонецЕсли; СтрокаСкидки.СоСкидкойУп =СтрСтрукт.СоСкидкойУп; СтрокаСкидки.СоСкидкойШт =СтрСтрукт.СоСкидкойШт; СтрокаСкидки.Приоритет =СтрСтрукт.Приоритет; КонецЦикла; КонецЕсли; СтарыеТекДан = ТекДан.Штрихкод; Если ВключитьКнопкуПечатиЦенникаСоскидкой Тогда Элементы.ФормаПечатьЦенникаДляТекущегоТовараСоСкидкой.Видимость=Истина; Иначе Элементы.ФормаПечатьЦенникаДляТекущегоТовараСоСкидкой.Видимость=Ложь; КонецЕсли; КонецЕсли; КонецЕсли;

Также есть обработчик ожидания в модуле управляемого приложения, запускается раз в 5 сек.
Код обработчика ожидания:

// Проверка Завершения приложения ПроверкаВыходаИзСистемы = Общий.ПроверкаВыходаИзСистемы(); Если ТипЗнч(ПроверкаВыходаИзСистемы)=Тип("Структура") Тогда Если ПроверкаВыходаИзСистемы.ЗавершениеРаботы Тогда ЗавершитьРаботуСистемы(Ложь); ИначеЕсли ПроверкаВыходаИзСистемы.ОткрытьФорму Тогда ОткрытьФорму("ОбщаяФорма.ФормаВыходаИзСистемы". РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс); КонецЕсли; КонецЕсли; //Запуск регламентированных заданий Если Общий.РольДоступнаНаСервере("Заведующий") Тогда //Завершение работы Заведующих Между 5:00 И 5:15 Если (Число(Формат(ТекущаяДата(), "ДФ=ЧЧмм"))>600) И (Число(Формат(ТекущаяДата(), "ДФ=ЧЧмм"))<615) Тогда ЗавершитьРаботуСистемы(); КонецЕсли; //Показать новые загруженные утвержденные товары заведующим Если ПоказыватьНовыеУтвержденныеТовары И Общий.ЕстьНовыеУтвержденныеТовары() Тогда ОткрытьФорму("РегистрСведений.УтвержденныеТовары.Форма.ФормаСпискаНовыхУтвержденныхТоваров", . РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс); КонецЕсли; //Вывод информации о разногласии цен //Запускать раз в час Если (глВремяПоследнегоПоказаИнформацииОРазногласииЦен =Неопределено) ИЛИ (глВремяПоследнегоПоказаИнформацииОРазногласииЦен<(ТекущаяДата()-(60*60))) Тогда Если ПоказыватьИнформациюОРазногласииЦен Тогда глВремяПоследнегоПоказаИнформацииОРазногласииЦен = ТекущаяДата(); ОткрытьФорму("Документ.АктРазногласияЦен.Форма.ФормаТоваровСРазногласиемЦен"); КонецЕсли; КонецЕсли; //Централизованная переоценка, Загрузка и вывод информации о переоцененных товарах Если ЗапускатьЦентрализованнуюПереоценку Тогда ОбменСервер.ЗагрузкаЦентрализованнойПереоценкиВФоне(); Если Общий.ПолучитьКонстанту("ПоказатьИнформациюОЦентрализованнойПереоценке") Тогда ОткрытьФорму("РегистрСведений.ТоварыОбработанныеЦентрализованнойПереоценкой.Форма. ФормаИнформацииОТоварахОбработанныхЦентрПереоценкой", . ВариантОткрытияОкна.ОтдельноеОкно. РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс); Общий.УстановитьКонстанту("ПоказатьИнформациюОЦентрализованнойПереоценке",Ложь); КонецЕсли; Если ((Общий.ПараметрыСеанса("ДатаИнфОТоварахПереоценки")+(60*30))<ТекущаяДата()) И Общий.ЕстьТоварыТоварыОбработанныеЦентрализованнойПереоценкой() Тогда ОткрытьФорму("РегистрСведений.ТоварыОбработанныеЦентрализованнойПереоценкой.Форма. ФормаИнформацииОТоварахОбработанныхЦентрПереоценкой", . РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс); Общий.ПараметрыСеанса("ДатаИнфОТоварахПереоценки",Ложь,ТекущаяДата()); КонецЕсли; КонецЕсли; //Запуск регламентных заданий Если НЕ ЗапускатьВыполнениеРегламентныхЗаданийВОдномПроцессе Тогда ВыполнитьОбработкуЗаданий(); КонецЕсли; КонецЕсли; Если ЗапускатьВыполнениеРегламентныхЗаданийВОдномПроцессе и ВыполнятьРегламентныеЗадания Тогда ВыполнитьОбработкуЗаданий(); КонецЕсли; Если ТекущийПользовательРобот Тогда Робот2.ОтветНаЗапросыИзвне(); КонецЕсли; //Завершение работы после 22:00 Если (Число(Формат(ТекущаяДата(), "ДФ=ЧЧ"))>22) И (НЕ ВыполнятьРегламентныеЗадания) И ЗапускатьВыполнениеРегламентныхЗаданийВОдномПроцессе И (Не Общий.РольДоступнаНаСервере("ПолныеПрава")) Тогда ЗавершитьРаботуСистемы(); КонецЕсли;

Также выполняются регламентные задания, для запуска регламентных заданий используется отдельный процесс.

p.s. На просторах интернета такой проблемы не нашел.

Как победить перенос курсора в начало строки в SublimeText?

При переводе каретки на новую строку все в норме — курсор встает в туже позицию что и начало предыдущей строки, но если убрать курсор в другое место, набрать хотя бы один символ, а затем вновь вернуть его в ту новую пустую строку, то он перескакивает в самое начало строки.
Причем происходит это только в случае, если набрать в другой строке какой-либо символ.
Приходится нажимать Tab, при этом он возвращается в нужную позицию.
Наверное это единственное что раздражает в этом замечательном редакторе.

Кто знает как победить данное неудобство?

  • Вопрос задан более трёх лет назад
  • 7526 просмотров

Комментировать
Решения вопроса 0
Ответы на вопрос 3

не знаю имеет это отношнние к вопросу, но я заметил, что при сохраниение, сублим убирает все отступы справа.
Т.е. если стока пустая и нажать сохранить, то курсор встанет в начало строки убрав табуляцию

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать

Это связано с тем, что после возвращения в строку, у Sublime нету контекста, куда вам хочеться поставить курсор. Я не знаю расширения, решающего эту проблему.

Лично я всегда, когда собираюсь из строки уходить, кладу символ комментария таким образом ставя «закладку». После возвращения курсора на место, символ стираю. Смешно, наверное, но мне так комфортнее.

Ответ написан более трёх лет назад
Makito @Makito Автор вопроса
Мда, печально. Видимо придется привыкать.

zdimaz

Фронтенд разработчик

У меня прикол!
Когда нажимаю на ESP все летит в щи, больше не могу менять курсор, все писать код уже не могу, тупо выделяет все , удалить нельзя (
Бред!

Перескакивает курсор в input при добавлении текста

Всем добрый день, хочу сделать живой поиск как у Яндекса, все уже почти получилось, но если «переходить» клавишами клавиатуры вверх и вниз по списку предложенных вариантов поиска, то курсор в input переходит то в конец текста, то в начало. Соответственно если нажимать клавишу вниз, то курсор встает в конец текста в поле input, если нажать клавишу вверх, то курсор встанет сначала в начало текста в поле input , а только при повторном нажатии будет «переходить» по списку. Переходить в кавычках потому как просто имитируется выбор словосочетания в списке путем выделения цвета. Если убрать код вставки выбранного текста в поле input , то все нормально, курсор стоит на прежнем месте. $(‘#search’).val($(«li:eq(«+poz+»)»).text()); Вот часть кода для «перемещения» по списку вариантов словосочетания:

$('#search').keydown(function(e)< $("ul#resSearch").children().each(function() < $(this).css( "color", "black" ); >); razmer=$("ul#resSearch li").length; if (poz==-1) else if (poz==razmer) if (e.keyCode == '40') < $('ul#resSearch').find("li:eq("+poz+")").css( "color", "red" ); $('#search').val($("li:eq("+poz+")").text()); poz++;>if (e.keyCode == '38') < poz--; $('ul#resSearch').find("li:eq("+poz+")").css( "color", "red" ); $('#search').val($("li:eq("+poz+")").text()); >>); 

Отслеживать

22.4k 11 11 золотых знаков 59 59 серебряных знаков 121 121 бронзовый знак

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *