Сообщество
Логин
Пароль
Забыли пароль?     Регистрация
От всей души
Мы старались, делали.
Можно поблагодарить разработчиков любой суммой.
Общение / Веб версия / Операция деления в поле ввода для суммы

Операция деления в поле ввода для суммы

x35bug
25 апреля 2014 17:17
Столкнулся с такой проблемой: при попытке ввести в поле ввода суммы формулы вида 123,32/2 вместо знака деления появляется почему-то точка.
Admin
 
25 апреля 2014 18:29
Здравствуйте,
См. новость от 9-го декабря.
"Фишечка: В поле суммы, при вводе символов "ю" "б" и "/" они автоматически заменяется на точку или запятую. Это чтоб раскладка клавиатуры не мешала вводить копейки. Если вдруг кому-то символ "/" нужен как знак деления во встроенном калькуляторе, просто наберите его ещё раз, а точку сотрите."
x35bug
26 апреля 2014 12:29
Admin Пишет:
Это чтоб раскладка клавиатуры не мешала вводить копейки. Если вдруг кому-то символ "/" нужен как знак деления во встроенном калькуляторе, просто наберите его ещё раз, а точку сотрите."
Учитывая, что в моих раскладках "/" соотвествует "х" - для таких пользователей, как я, вы этой сомнительной "фишечкой" добавили исключительно проблемы с "наберите еще раз а точку сотрите". Печаль.
Admin
 
26 апреля 2014 13:41
А есть ли способ определить таких пользователей? Можно было бы подправить.
x35bug
26 апреля 2014 19:26
Боюсь, что только спросив их - т.е. через отдельную настройку. Насколько я знаю, в javascript нет возможности определить раскладку - только язык.
Anna
28 апреля 2014 12:26
Admin Пишет:
просто наберите его ещё раз, а точку сотрите
Тест показал, что точку стирать не обязательно.
А можно двойной минус в плюс переделывать? На айпаде плюс находится глубоко и неудобно. 5--3=8 было бы крайне удобно.
Admin
 
28 апреля 2014 13:20
Anna Пишет:
А можно двойной минус в плюс переделывать?
Ок, подумаем.
x35bug
18 октября 2014 16:34
Сегодня обнаружил грусть-печаль: опять что-то перемудрили со вводом, и теперь я ВООБЩЕ НЕ МОГУ ПРИ КИРИЛЛИЧЕСКОЙ РАСКЛАДКЕ ВВЕСТИ ТОЧКУ ИЛИ ЗАПЯТУЮ :( При этом кириллическая раскладка у меня - самая обычная "йцукен". Благо, в латинской у меня их давно целых две - на собственно "." и на "/" :)

Я так понимаю, вы блокируете ввод где-то на уровне javascript по keycode ... Пожалуйста, уберите это дело. Если кто-то вводит буквы в поле ввода суммы - так ну и пусть вводит. А мне теперь нужно каждый раз переключаться на латиницу, если сумма нецелая.
x35bug
18 октября 2014 16:57
А на латинице я теперь не могу набрать "-" :(
Admin
 
18 октября 2014 22:43
x35bug Пишет:
Пожалуйста, уберите это дело. Если кто-то вводит буквы в поле ввода суммы - так ну и пусть вводит.
Зачем же, лучше просто добавить ваши коды в список разрешенных. Точка и запятая должны работать.

Сейчас в js консоль выводится charcode, при вводе чего-либо в поле сумма. Если можете, откройте её и посмотрите какие у вас коды для точки и запятой.
x35bug
22 октября 2014 22:03
У меня сейчас там выводится только ошибка :)

ReferenceError: event is not defined
if (code > 95 && code < 112 || e.ctrlKey || event.metaKey) {

Зато ввод любых символов работает без проблем.


Вообще у меня так:
минус в латинской раскладке
onKeyDown onKeyPress onKeyUp
event.keyCode '173' '0' '173'
event.charCode '0' '45' '0'
event.which '173' '45' '173'



точка в кириллической раскладке
onKeyDown onKeyPress onKeyUp
event.keyCode '90' '0' '90'
event.charCode '0' '46' '0'
event.which '90' '46' '90'

Но если их просто добавить - это же решит только мои проблемы. Если у кого-то будет иной вариант раскладки - у него проблема останется.
Admin
 
22 октября 2014 22:13
x35bug Пишет:
У меня сейчас там выводится только ошибка :)

ReferenceError: event is not defined
А сейчас?
Admin
 
22 октября 2014 22:16
Не могут же чаркоды быть у всех свои, что это был бы за бардак.
x35bug
22 октября 2014 22:44
Впрочем, в соседнем топике Ilyan предложил решение, которое на первый взгляд выглядит лучше.
x35bug
22 октября 2014 22:46
Не обновил страницу перед написанием комментария :) Сейчас ввод не работает, в консоль при нажатии . в кириллической раскладке выводится 90
x35bug
22 октября 2014 22:48
И да F-клавиши тоже не работают :) Не сразу понял, почему же у меня не открывается файрбаг (он на F12 висит).
x35bug
22 октября 2014 22:55
x35bug Пишет:
Сейчас ввод не работает
Имелся ввиду ввод "." и "," в кириллической раскладке, конечно.

Что же касается "бардака" - дело не в том. Просто раскладки у всех разные. У меня на одной клавише в ланинской "z" а в кириллической - "." . Но это еще что. У меня цифры примерно на тех же местах. А вы, для разнообразия, попробуйте поставить, скажем, раскладки "Дворак для левой руки" + обычный "йцукен" и потестировать.
x35bug
22 октября 2014 23:14
То есть системная ошибка подхода в том, что вы пытаетесь привязать keycode, которые в общем соответствуют определенным клавишам/символам в некоторой латинской раскладке к символам, которые, по вашему мнению, находятся на этой же клавише в некоторой произвольной другой раскладке. А это в общем случае невозможно :)

Это может хорошо работать для пары qwerty/йцукен, можно добавлять коды z=='90' для дворака, q=='81' для иврита, на который жаловались в соседней теме и т.д. Но это не будет универсальным решением - рано или поздно к вам придет однорукий пользователь, у которого в верхнем ряду в русской раскладке цифры, а в латинской - P-F-M-L-J и []. И у него это не будет работать, если не добавить и коды для этих клавиш.
Admin
 
23 октября 2014 11:12
Пока добавим временно 90, будем искать решение получше.
Ilyan
23 октября 2014 11:41
Admin Пишет:
будем искать решение получше
http://learn.javascript.ru/play/HJ0mCb

Добавил в решение x35bug поддержку 'ю' и 'б'.
Admin
 
23 октября 2014 12:42
Ещё не хватает точки вместо слэша (на первом нажатии, и слэша, на последующих). И фильтрацию вставки по ctrl+v и paste мышкой.

Вот то была бы вещь :).
Ilyan
23 октября 2014 14:09
Admin Пишет:
Ещё не хватает точки вместо слэша
Жаль не получается.

Ведь несмотря на решение кучи вышеописанных проблем, решение без слэша не может быть "оптимальным", верно?
Ilyan
23 октября 2014 14:10
Кстати, а почему не работает "5--3"?

Это верное математическое выражение, аналогичное "5-(-3)", которое работает.
Ilyan
23 октября 2014 14:13
И главное, в парсере не хватает совсем чуть-чуть: например, "8-+-5" работает правильно,
как "8-(+(-5))" = 13
Admin
 
23 октября 2014 14:34
Ilyan Пишет:
Ведь несмотря на решение кучи вышеописанных проблем, решение без слэша не может быть "оптимальным", верно?
Да, чуть-чуть не дотягивает. Но код выше скорее всего пригодится, надо допилить (или немного переделать).
Anna
25 октября 2014 21:49
Admin Пишет:
Пока добавим временно 90, будем искать решение получше.
Возможно напишу глупость, ибо программировала в последний раз в вузе и это было давно, но первая мысль по обработке такая:
Если в поле введено что-то из множества допустимых символов, то ввести этот символ, иначе ввести точку.
Множество допустимых - это цифры и знаки математических операций.

То есть отлавливать не кейкод, а чаркод. Ну а если кейкод, то определять раскладку и в зависимости от неё уже разрешать или не разрешать отдельные клавиши.

Зачем городить городушку с кейкодами? Только чтобы менять "/" на "."?
Ну так меняйте! Правда тут бы проверка на кейкод не помешала.
Anna
25 октября 2014 21:54
Ilyan Пишет:
http://learn.javascript.ru/play/HJ0mCb
Ну собственно это я и пыталась сказать.
Ilyan
25 октября 2014 23:11
Ilyan Пишет:
Кстати, а почему не работает "5--3"?
Давно надо оставить привычку задавать сразу несколько вопросов - ответ будет в лучшем случае на 1.

Так почему не работает "5--3"?
Admin
 
26 октября 2014 09:50
Ilyan Пишет:
Так почему не работает "5--3"?
Так работает eval.
Ilyan
26 октября 2014 10:40
Так может сначала заменить в стринге "--" на "+"?

$patterns = array();
$patterns[0] = '/\-\-(?=\d)/';
$patterns[1] = '/\+\+(?=\d)/';
$patterns[2] = '/\-\+(?=\d)/';
$patterns[3] = '/\+\-(?=\d)/';
$replacements = array();
$replacements[0] = '+';
$replacements[1] = '+';
$replacements[2] = '-';
$replacements[3] = '-';

$str = "5++--+3";
while (preg_match("/[-+][-+](?=\d)/", $str)) {
echo $str. "\r\n";
$str = preg_replace($patterns, $replacements, $str);
}
echo $str;
Admin
 
26 октября 2014 18:46
Ilyan Пишет:
Так может сначала заменить в стринге "--" на "+"?
Вы считаете, что это кому-то нужно?
Ilyan
26 октября 2014 19:09
Admin Пишет:
Вы считаете, что это кому-то нужно?
Ну вы же считаете, что кому-то нужно замена '/' на '.' :)

Но процитирую:

Anna, 28 апреля 12:26

А можно двойной минус в плюс переделывать? На айпаде плюс находится глубоко и неудобно. 5--3=8 было бы крайне удобно.
Ilyan
26 октября 2014 19:11
И главное, что это даже не костыль, а совершенно правильная обработка арифметических выражений. В отличии от eval, который вычисляет на арифметическое выражение, а значение php строки, где разрешены операторы -- и ++.
Ilyan
26 октября 2014 19:16
А то получается, что вы объявляете что поле суммы принимает математическое выражения, а парсите его как php-строку.

И ведь вы все равно обрабатываете пользовательскую строку перед eval - хотя бы для замены ',' на '.'
Так почему бы не сделать код еще немного лучше?
Admin
 
26 октября 2014 19:51
Ilyan Пишет:
На айпаде плюс находится глубоко и неудобно. 5--3=8 было бы крайне удобно.
Да, что-то ускользнула эта просьба.
Прикрутили замену -- на +.
Ilyan
26 октября 2014 20:08
А почему не все случаи-то? Вот объясните логику, по которой вы только что пошли и исправили свой код, при этом НАМЕРЕННО оставив там ошибку?

Почему СПЕЦИАЛЬНО продолжаете браковать верные математические выражения (например 5----3)?

Назло мне? :)
Выбью себе глаз, пусть у тещи зять одноглазый будет?
Ilyan
26 октября 2014 20:35
http://learn.javascript.ru/play/Bg5Zc

Добавил замену '/' на '.' и наоборот. Имхо, даже лучше, чем у вас, т. к. не остается '.'

В принципе, по той же логике можно менять и '--' на '+', несколько точек подряд и т. п.
Admin
 
26 октября 2014 20:56
Ilyan Пишет:
А почему не все случаи-то?
Потому что всех много, и все они не нужны. Человек точно сформулировал проблему и описал кейс про ввод на айпаде. Никаких других кейсов когда и кому может быть нужно '----' и т.п., в голову не приходит.

"Назло мне? :)" - ни в коем случае.
Admin
 
26 октября 2014 21:07
Ilyan Пишет:
Имхо, даже лучше, чем у вас, т. к. не остается '.'
Может и так. Хотя 12.34/2 в нашем случае наберётся без лишних вопросов и нажатий.
В любом случае спасибо, подпилим код и будем использовать.

PS
Вам бы ещё PHP освоить, цены не будет.. а то дел у нас много, а делателей мало.
Ilyan
26 октября 2014 21:10
Admin Пишет:
Хотя 12.34/2 в нашем случае наберётся без лишних вопросов и нажатий.
То есть 12.34/2+34.56 в вашем случае вообще не наберется?

Подождите с http://learn.javascript.ru/play/Bg5Zc - там баги, если введенный символ - не последний.
1 2  Туда  
Чтобы отвечать на сообщения - зарегистрируйтесь и войдите в личный кабинет.