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

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

25.09.2023, 11:28. Показов 636. Ответов 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
1654 / 1153 / 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
14122 / 9340 / 1350
Регистрация: 21.01.2016
Сообщений: 35,088
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
14122 / 9340 / 1350
Регистрация: 21.01.2016
Сообщений: 35,088
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
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru