Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.11.2013, 09:19
Аспирант
Отправить личное сообщение для VolodinAS Посмотреть профиль Найти все сообщения от VolodinAS
 
Регистрация: 24.11.2012
Сообщений: 44

Разделение разрядов числа с помощью AJAX
Доброе утро, уважаемые форумчане
При создании игры Угадай число возникла необходимость отображения числа с разделителями тысяч (потому что, когда пишешь число "20940393", то не очень удобно отображается, что чего написал. А когда видно, что "20 940 393", то становится намного проще).

Итак, проблема вот в чем. В дополнении к обработке тысяч еще стоит обработка строки (ввод только чисел). Вот сама функция:

$(document).ready(function(){
$('#gad').bind("change keyup input click", function() {
    if (this.value.match(/[^0-9]/g)) {
        this.value = this.value.replace(/[^0-9]/g, '');
    }
});
});


Функция разделения (нашел ее после того, как перерыл гугл) имеет вид регэкспа:
str.replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, ' ');


Я поместил обработку инпута в функцию и сделал setInterval:
function numformat(){
$("#gad").val() = $("#gad").val().replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, ',');
}
$(document).ready(function(){
   numformat();
   setInterval('numformat()',10);
});


Но тут возникает проблема, что ввод только чисел прекращается (можно вводить и буквы). Вопрос: как сделать по человечески?

P.S. Маленький подводный камень - ввод только чисел запрещает ввод других символов. Из-за незнания регэкспа не смог исправить функцию ввода только чисел. Это нужно учесть тоже.

P.P.S. Заранее, спасибо за помощь
Ответить с цитированием
  #2 (permalink)  
Старый 08.11.2013, 09:26
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,254

Сообщение от VolodinAS
как сделать по человечески?
Как вариант, сначало применить проверку, а потом форматирование...

var val=$("#gad").val();
val=val.replace(/[^0-9]/g, '');
val = val.replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, ',');
$("#gad").val(val);
Ответить с цитированием
  #3 (permalink)  
Старый 08.11.2013, 10:10
Аспирант
Отправить личное сообщение для VolodinAS Посмотреть профиль Найти все сообщения от VolodinAS
 
Регистрация: 24.11.2012
Сообщений: 44

Код работает. Но убирает НЕ числа. Можете регэксп подправить?

Последний раз редактировалось VolodinAS, 08.11.2013 в 10:12.
Ответить с цитированием
  #4 (permalink)  
Старый 08.11.2013, 10:15
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,254

Сообщение от VolodinAS
Но убирает НЕ числа.
Разумеется.

Сообщение от VolodinAS
Можете регэксп подправить?
Я х/з... Это ведь все взято из твоих примеров...
Ответить с цитированием
  #5 (permalink)  
Старый 08.11.2013, 10:16
Аспирант
Отправить личное сообщение для VolodinAS Посмотреть профиль Найти все сообщения от VolodinAS
 
Регистрация: 24.11.2012
Сообщений: 44

Ладно, и так пойдет Спасибо
Ответить с цитированием
  #6 (permalink)  
Старый 08.11.2013, 10:48
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

Сообщение от VolodinAS
Разделение разрядов числа с помощью AJAX
Скоро начнут сортировку массивов с помощью AJAX делать
Сообщение от VolodinAS
P.S. Маленький подводный камень - ввод только чисел запрещает ввод других символов. Из-за незнания регэкспа не смог исправить функцию ввода только чисел. Это нужно учесть тоже.
Не понял. Что можно вводить по условиям задачи и что надо проверять? Если нечисла вводить нельзя, то чем не устраивает вариант ksa?
Сообщение от VolodinAS
Можете регэксп подправить?
Могу, только надо понять, на что подправлять
Ответить с цитированием
  #7 (permalink)  
Старый 08.11.2013, 11:13
Аспирант
Отправить личное сообщение для VolodinAS Посмотреть профиль Найти все сообщения от VolodinAS
 
Регистрация: 24.11.2012
Сообщений: 44

Мне нужно, чтобы вполе input можно было вводить ТОЛЬКО числа, НО при условии что будет одновременное разделение тысяч числа пробелом (или запятой, всё равно)
чтобы когда я вводил 123456789 оно сразу превращалось в 123 456 789
Ответить с цитированием
  #8 (permalink)  
Старый 08.11.2013, 18:34
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

С числами понятно как раз. Не понятно вот это:
Сообщение от VolodinAS
Код работает. Но убирает НЕ числа. Можете регэксп подправить?
Сообщение от VolodinAS
Мне нужно, чтобы вполе input можно было вводить ТОЛЬКО числа
Убирает не числа, ну и хорошо же, разве нет?
вот, смотрите, что не так:
<input type="text" id="gad"></input>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
<script>
function numformat(){
var val=$("#gad").val();
val=val.replace(/[^0-9\s]/g, '');
val = val.replace(/(\d\d\d)(\d)/g, '$1 $2')
$("#gad").val(val);
}
$(document).ready(function(){
   setInterval(numformat, 100);
});
</script>

Непонятно еще, в чем необходимость это делать через сетинтервал, ну, хозяин - барин

Последний раз редактировалось BETEPAH, 08.11.2013 в 18:43.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разделение разрядов числа пробелами. Kolyaj Ваши сайты и скрипты 17 12.03.2020 15:57
Книги по Ajax BaVa Учебные материалы 18 18.08.2013 14:05
Загрузка страниц с помощью ajax radikal AJAX и COMET 3 29.11.2012 16:26
как поменять цвет элементов div с помощью ajax? uspehovna AJAX и COMET 12 20.08.2010 17:21
Проверка наличия логина в БД при регистрации, с помощью ajax storng Общие вопросы Javascript 4 09.04.2010 20:24