2012-02-03 1 views
0

I форматирует номера, используя плагин jqnumformatter. Все в порядке, но у меня проблемы с удалением запятых. Я использовал .each(), чтобы перебрать все входы, на которых есть запятые. Но в этом случае мне нужно дважды нажать на следующую кнопку, чтобы все запятые на номерах были удалены.Формат и неформатные номера в jQuery

<script> 
$(function(){ 

    $("#next").click(function(){//unformats the numbers 

     $("input[data-toformat=format]").each(function(){ 
      var formatted = $(this).val(); 
      var unformatted = formatted.replace(",", ""); 
      $(this).val(unformatted); 
     }); 

    }); 


}); 
</script> 

<input type="text" id="num" data-toformat="format" autofocus/> 
<input type="text" id="num2" data-toformat="format" /> 
<input type="button" id="next" value="next"> 
<input type="button" id="back" value="back"> 

У вас есть лучший способ делать это? Это действительно не в состоянии неформат число все сразу, если у меня есть 2 или более запятых на каждое из чисел.

ответ

3

Проблема заключается в том, как вы вызываете .replace() method:

var unformatted = formatted.replace(",", ""); 

Если вы передаете строку в качестве первого параметра она только заменяет первое вхождение. Если вы проходите регулярное выражение, которое вы можете установить регулярное выражение «глобальный» флаг, чтобы заменить все вхождения:

var unformatted = formatted.replace(/,/g, ""); 

Обратите внимание, что ваш код может быть упрощена совсем немного, потому что вы на самом деле не нужны локальные переменные:

$(this).val($(this).val().replace(/,/g, "")); 

Но можно упростить еще больше, потому что если вы передаете функцию к .val() method вам даже не нужен .each() цикл:

$(function(){ 
    $("#next").click(function(){ 
     //unformats the numbers 
     $("input[data-toformat=format]").val(function(i, oldVal){ 
      return oldVal.replace(/,/g, ""); 
     }); 
    }); 
}); 

Этот синтаксис для .val() передает старое (текущее) значение каждого элемента в функцию, которую вы поставляете, устанавливая новое значение для возврата из этой функции.

+0

будет ли это работать для динамически генерируемых элементов? –

+0

Будет ли _what_ работать для динамически генерируемых элементов? Часть '.replace()' работает с любой строкой. Часть '.val()' (или '.each()' из вашего кода) работает с любыми элементами в объекте jQuery, в которых вы его запускаете, т. Е. С любыми элементами, которые совпадали с селектором в то время. – nnnnnn