使用maskMoney输入插件 - 仍然需要一些帮助

时间:2009-08-03 15:24:43

标签: jquery coldfusion currency mask

好的,考虑到正则表达式无法正常运行并且没有错误,我将尝试使用钱掩码。

目标仍然是只允许数字字符和小数。使用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 个答案:

答案 0 :(得分:3)

你很可能想要

.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 :(得分:1)

可能有点简单,但为什么不使用否定? Perl语法:不确定javascript。

为什么不: 米/([^ 0-9] +)//克

0到9之间的匹配

答案 2 :(得分:0)

编辑:我原来的答案部分正确,因为它改变了价值,但它没有修复一个更严重的错误,我现在将解释。

我的原始修复导致单元格具有相同值的原因是因为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);

字符类中的$很好,正则表达式中的大多数元字符在字符类中并不特殊。但是,“$-,”将匹配“$,之间的任何字符。我认为这是您想要的,但如果您只想匹配$,以及-,那么您应该将该部分更改为“$,-”(即{{1 }})。字符类末尾的/[A-Za-z$,-]/g将匹配-,其他任何地方都被视为范围,除非您将其转义(-)。

答案 3 :(得分:0)

确定。所以我自己想出来了。

使用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));
            });

每个试图帮助的人,谢谢你抽出时间!

如果有人想将此示例或代码用于将来的应用程序,请随时发表评论并告诉我,我可以设置一个不同的页面,其中包含示例和说明以及源代码。

答案 4 :(得分:-2)

Dollar($)用于标记正则表达式搜索的结束。 /[A-Za-z$-,]/可能效果不佳。用反斜杠(\$)逃避美元。