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 - там баги, если введенный символ - не последний.
|
|
|