Использование плагина ввода maskMoney - нужна помощь - PullRequest
0 голосов
/ 03 августа 2009

Хорошо, учитывая, что регулярные выражения не работают должным образом и ошибок нет, я попытаюсь использовать маску денег.

Цель по-прежнему состоит в том, чтобы разрешить использование только цифровых символов и десятичной дроби. С maskMoney это работает за вас.

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

На данный момент маски работают хорошо, но я больше не могу рассчитывать. Это то, где я обеспокоен.

JQuery и код JavaScript:


<script type="text/javascript" language="javascript">
    $(document).ready(function(){
     $('.date').mask("99/99/9999");
     $('.account').mask("99-9-999999-9999");
     /*calcuating the vertical and horizontal inputs*/

     $('.R26').attr("disabled", "disabled");

 $('.calc').maskMoney({symbol: ""});
 $('.R25').unmaskMoney();
 $('.R18').unmaskMoney();

 $('input.description').focus(function(){
  if($(this).val()=="Enter text here"){
   $(this).val(" ");
  }

  else{
   $(this).val($(this).val());
  }
 });
 $('input.description').blur(function(){
  if($(this).val()==" "){
   $(this).val("Enter text here");
  }    
 });

$('.calc').keyup(function(){
 var classArray = $(this).attr('class').split(' ');
 //Personal gas expense
 $('.gasamount').sum("change", "#totals4");
 var num = $(this).attr("id").replace(/[A-Za-z$,-]/g, "");
 $('#gasmoney'+num).val(<cfoutput>#mileage#</cfoutput> * $(this).val());
 $('.gasmoney').sum("change", "#totals5");
 //////////////////////

 //Sum of each cell
 $.each(classArray, function(){
  $('.'+this).sum("change", ".ttl"+this);
 });
 //Finding the grandtotal
 var grandTotal = $('.row26').parent().children('td:last').children('input');
 var sum = $('.row25').parent().children('td').children('.calc').sum();
 grandTotal.val(Number(sum).toFixed(2));
});

ColdFusion и HTML-код:

#labels [r] #

<cfloop from="1" to="7" index="i">

 <td id="Day#i#" class="row#r# col#i#">
  <cfif r EQ 1>#Left(DayOfWeekAsString(i),3)#<cfelse><cfif r EQ 2>
  <input type="text" class="date-mask" /><cfelse>
  <input type="text" 
  <cfif labels[r] EQ "Personal Car: Mileage ##"> id="gasamount#i#" <cfelseif labels[r] EQ "Personal Car: Mileage $">id="gasmoney#i#" </cfif><cfif labels[r] EQ "Daily Totals">id="dailytotals#i#"</cfif>
   class="<cfif labels[r] EQ "Personal Car: Mileage ##">gasamount<cfelse><cfif labels[r] NEQ "Daily Totals">C#i#</cfif></cfif>
   <cfif labels[r] EQ "Personal Car: Mileage $">gasmoney<cfelse>calc R#r#</cfif>
   <cfif labels[r] EQ "Daily Totals">ttlC#i#</cfif>"
    <cfif labels[r] EQ "Daily Totals" OR labels[r] EQ "Personal Car: Mileage $">readonly="readonly"</cfif>
     /></cfif>
     </cfif>
 </td>


</cfloop>

 <td class="totals"><cfif r EQ 1>Total<cfelse><input type="text" id="totals" class="ttlR#r#" readonly="readonly" /></cfif></td>

У меня были похожие вопросы с тем же приложением, но на самом деле это не дубликат (если вы думаете, что это так).

'.' + Это объект, созданный массивом. Я использовал cfloops для создания большой таблицы и добавил несколько классов. Пришлось разбить несколько классов на массивы, а затем смог выбрать каждый класс как свой.

Ответы [ 5 ]

3 голосов
/ 04 августа 2009

Весьма вероятно, что вы хотите

.replace(/[A-Za-z$,-]/g, "")

вместо

.replace(/[A-Za-z$-,]/g, "")

Последнее выражение соответствует:

  • все символы от "A" до "Z"
  • все символы от "a" до "z"
  • все символы от "$" до "," (такой диапазон есть, но я не уверен, действительно ли это ваше намерение)

Предыдущее выражение (обратите внимание на сдвинутую черту) соответствует:

  • все символы от "A" до "Z"
  • все символы от "a" до "z"
  • персонаж "$"
  • персонаж ","
  • персонаж "-"

Тире имеет особое значение в символьных классах, оно определяет диапазон. Если вы хотите сопоставить буквальную черту, переместите ее в конец (или начало) класса символов.

РЕДАКТИРОВАТЬ: Помимо этого вы, кажется, хотите установить значение. Настройка через val() работает путем передачи нового значения в функцию:

$dotThis = $('.' + this);
$dotThis.val($dotThis.val().replace(/[A-Za-z$-,]/g, ""));

Это утверждение:

$('.'+this).val().replace(/[A-Za-z$-,]/g, "");

создает замененную строку и немедленно выбрасывает ее.

1 голос
/ 11 августа 2009

Может быть немного упрощенно, но почему бы не использовать отрицание? Синтаксис Perl: Не уверен насчет JavaScript.

Почему бы и нет: м / ([^ 0-9] +) // г

Совпадения от нуля до девяти

0 голосов
/ 12 августа 2009

Хорошо. Так что я понял это самостоятельно.

Используя maskMoney (), я могу контролировать, какие символы вводить, и при этом правильно вычислять таблицу.

Все, что мне нужно было сделать, чтобы исправить вычисления, это снять маску .gasamount:

                $('.gasamount').unmaskMoney();

Это то, что исправило проблемы с расчетами. ^^ Маска вызывала проблемы для всех 2 строк, и эти 2 строки приводили к срыву вычислений.


                $('.calc').maskMoney({symbol: ""});
                $('.R25').unmaskMoney();
                $('.R18').unmaskMoney();

            $('.calc').keyup(function(){
                var classArray = $(this).attr('class').split(' ');
                //Personal gas expense
                $('.gasamount').sum("change", "#totals4");
                var num = $(this).attr("id").replace(/[A-Za-z$,-]/g, "");
                $('#gasmoney'+num).val(<cfoutput>#mileage#</cfoutput> * $(this).val());
                $('.gasmoney').sum("change", "#totals5");
                //////////////////////

                //Sum of each cell
                $.each(classArray, function(){
                    $('.'+this).sum("change", ".ttl"+this);
                });
                //Finding the grandtotal
                var grandTotal = $('.row26').parent().children('td:last').children('input');
                var sum = $('.row25').parent().children('td').children('.calc').sum();
                grandTotal.val(Number(sum).toFixed(2));
            });

Всем, кто пытался помочь, спасибо, что нашли время!

Если кто-то захочет использовать этот пример или код для будущих приложений, не стесняйтесь комментировать и дайте мне знать, и я могу настроить другую страницу с примером, инструкциями и источником.

0 голосов
/ 03 августа 2009

РЕДАКТИРОВАТЬ: мой первоначальный ответ был частично правильным, в том, что он изменил значение, но это не исправило более серьезную ошибку, которую я сейчас объясню.

Причина, по которой мое первоначальное исправление заставляет когда-либо ячейку иметь одинаковое значение, заключается в том, что метод jQuery $ возвращает каждый элемент, который соответствует данному селектору. Однако при вызове val () вы получите только значение первого сопоставленного элемента, а установка значения путем вызова val (value) установит значение каждого сопоставленного элемента.

Решение состоит в том, чтобы выполнить замену над каждым (), которая затем будет очищать только один элемент (this). Если вы также хотите очистить итоговые ячейки, вы должны сделать , что в каждом () и использовать ".ttl" + this в качестве селектора вместо this.

$('.calc').keyup(function(){
    var classArray = $(this).attr('class').split(' ');

    //Sanitize out here, so we only affect one element.
    var singleCellVal = $(this).val()
    singleCellVal.replace(/[A-Za-z$-,]/g, "");
    $(this).val(singleCellVal);

    $.each(classArray, function(){
        var totalsum = $('.'+this).sum();
        $('.ttl'+this).val(Number(totalsum).toFixed(2));
    });

    //Finding the grandtotal
    var grandTotal = $('.row26').parent().
        children('td:last').children( 'input');
    var sum = $('.row25').parent().children( 'td').children('.calc').sum();
    grandTotal.val(Number(sum).toFixed(2));
});

То, что вы хотите, это

var value = $('.'+this).val();
value.replace(/[A-Za-z$-,]/g, "");
$('.' + this).val(value);

$ в классе символов в порядке, большинство метасимволов в регулярных выражениях не являются специальными в классах символов. Однако «$-,» будет соответствовать любым символам, которые находятся «между» $ и ,. Я предполагаю, что это то, что вы хотите, но если вы хотите сопоставить только $ и , и -, то вам следует изменить эту часть на "$,-" (т.е. /[A-Za-z$,-]/g). - в конце класса символов будет соответствовать -, где-либо еще рассматривается как диапазон, если вы не избежите его (\-).

0 голосов
/ 03 августа 2009

Доллар ($) используется для обозначения конца поиска по регулярному выражению. /[A-Za-z$-,]/ может не работать хорошо. Побег доллар с обратной косой чертой (\$).

...