Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
250 / 184 / 58
Регистрация: 12.03.2021
Сообщений: 1,043

Input (ввод формулы с переменными)

25.09.2023, 11:28. Показов 671. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно, суть - нужен input, в который будут вводиться математические операции и, по нажатию на кнопки, некие переменные (пока пришел к тому, что наиболее подходящее отображение таковых будет типа {val}).
Проблема - по нажатию на этот самый {val} в инпуте каретка должна вставать за закрывающей скобкой. по нажатию на backspace или при нажатии delete перед / после значения, оно должно удаляться полностью.
Что в голове - отслеживать положение каретки, проверять какие символы идут в строке до / после, отслеживать скобки, стирать всё что в них, менять позицию каретки. звучит как план, но очень муторный. Возмонжно, есть готовые решения или какие-нибудь идеи по более легкой реализации подобного?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.09.2023, 11:28
Ответы с готовыми решениями:

создание формулы с переменными
добрый день! мне необходимо создать формулу для столбца P, который складывается по формуле L*N+M*O, таким образом, чтобы при изменении...

Вставка формулы с переменными
Доброго времени суток. Нахожусь в процессе создания расчётного модуля в эксэле 2003,но наткнулся на проблему Требуется выводить на...

Цикл For с переменными вводимыми из input
Только-Только начинаю ) Делаю цикл с выводом и заданием условий, Ввожу цифры нажимаю расчёт - браузер зависает :cry: Как всегда в...

5
 Аватар для pincet
1655 / 1154 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
25.09.2023, 12:16
показал бы хотя бы свою PoC. нифига не ясно, что нужно
0
250 / 184 / 58
Регистрация: 12.03.2021
Сообщений: 1,043
27.09.2023, 09:12  [ТС]
Цитата Сообщение от pincet Посмотреть сообщение
показал бы хотя бы свою PoC. нифига не ясно, что нужно
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
pressButton(event) {
        if (('template' + this.props.mechanicindex + this.props.thresholdindex) === document.activeElement.id){
            let obj=global.structuredClone(this.props.kpiNewMissions);
            let formula = obj.threshold[this.props.thresholdindex].mechanic[this.props.mechanicindex].formula;
            let str= '';
            let finishFinded = null;
            let startFinded = null;
            if (event.key === "Backspace"){
                //Находим позицию ближайших закрывающей скобки и открывающей перед курсором
                for (let i = this.state.charterScore; i>=0; i--){
                    if (formula[i] === '}' && !finishFinded){
                        finishFinded = i;
                    }
                    if (formula[i] === '{' && !startFinded){
                        startFinded = i;
                    }
                }
                //когда закрывающая найдена и мы находимся вне переменной
                if (finishFinded && (finishFinded > startFinded) && (finishFinded === this.state.charterScore-1)){
                    //удаление переменной, если мы перед закрывающей скобкой
                    str = formula.slice(0, startFinded) + formula.slice(finishFinded+1, formula.length);
                }
                else {
                    //удаление символа (не переменной)
                    str =  formula.slice(0, this.state.charterScore-1) + formula.slice(this.state.charterScore, formula.length);
                    /* this.choiseCharter(); */
                    document.getElementById('template' + this.props.mechanicindex + this.props.thresholdindex).setSelectionRange(this.state.charterScore-1, this.state.charterScore-1)
                }
            }
            else if (event.key === "Delete"){
                //Находим позицию ближайших закрывающей скобки и открывающей перед курсором
                for (let i = this.state.charterScore; i<=0; i++){
                    if (formula[i] === '}' && !finishFinded){
                        finishFinded = i;
                    }
                    if (formula[i] === '{' && !startFinded){
                        startFinded = i;
                    }
                }
                //когда закрывающая найдена и мы находимся вне переменной
                if (startFinded && (finishFinded > startFinded)){
                    //удаление символа (не переменной)
                    if (startFinded !== this.state.charterScore+1){
                        str =  formula.slice(0, this.state.charterScore) + formula.slice(this.state.charterScore+1, formula.length-1);
                    }
                    //удаление переменной, если мы перед закрывающей скобкой
                    else {
                        str = formula.slice(0, startFinded) + formula.slice(finishFinded+1, formula.length);
                    }
                }
            }
            //добавление допустимых символов вручную
            else if(this.state.keyboardArr.includes(event.key)){
                str = formula.slice(0, this.state.charterScore) + event.key + formula.slice(this.state.charterScore, formula.length);
            }
            else{
                str = formula;
            }
            obj.threshold[this.props.thresholdindex].mechanic[this.props.mechanicindex].formula = str; 
            this.props.somethingChange({kpiNewMissions: obj})
        }
    }
экспертов в области чистого кода прошу не беспокоить. главная проблема на текущий момент в том, что каретка остается на позиции, а визуально после изменений она улетает в конец (даже там, где прямо прописана установка на позицию). ну и в целом, придется больше условий прописывать под данные кнопки + дописывать стрелки, что кажется каким-то безумием
0
Эксперт .NET
 Аватар для Usaga
14314 / 9400 / 1355
Регистрация: 21.01.2016
Сообщений: 35,450
28.09.2023, 07:10
Splaisto, ты на базе input'а редактор формул какой-то сваять хочешь? Не очень удачная идея.
0
250 / 184 / 58
Регистрация: 12.03.2021
Сообщений: 1,043
28.09.2023, 07:29  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Не очень удачная идея.
я открыт к предложениям) самому идея не очень, но пока не вижу решений лучше
0
Эксперт .NET
 Аватар для Usaga
14314 / 9400 / 1355
Регистрация: 21.01.2016
Сообщений: 35,450
28.09.2023, 08:11
Splaisto, как вариант, можно поискать готовый редактор, где у тебя будет возможность управлять курсором. А если будет подсветка синтаксиса, то можно будет и переменные красиво цветом выделять.

Можно попробовать и самому реализовать, но это будет масса работы. И точно не поверх input'а это надо делать...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.09.2023, 08:11
Помогаю со студенческими работами здесь

Ввод через пробел. Как остановить ввод. while(cin >> input)
Здравствуйте. Начну с условия задания. Ввести к-во элементов массива. Заполнить массив. Отсортировать и вывести на экран количество...

Записать формулы в приведенном виде (содержащим только операции над простыми переменными)
Формула:

Ввод уравнений с двумя переменными
using System; namespace ss { class Program { static void Main(string args) { ...

срабатывание формулы Input Translations у поля
Всем привет! Есть форма. Есть поля на форме, у которых на Input Translations есть формулы. скриптом по кнопке создаю форму, заполняю...

Ввод формулы
Всем добрый день, кто знает как правильно ввести данную формулу в mathcad 15, не как не получается.Заранее спасибо. Точнее часть с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru