Ok,考虑到经常表现不正常工作并没有错误,我要尝试和使用的金钱的面罩。

我们的目标是仍然只允许数字和一个小数。与maskMoney,这并将对你的工作。

此外,我需要能够成功地计算的每个细胞。

现在面具的工作良好,但是我不再能够计算。这是我的困扰。

能力和JavaScript code:


<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码:

#签[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创建一个大型表,并添加了多个课程。必须打破了多类成一个数组,然后是能够选择的各类作为其自己的。

有帮助吗?

解决方案 4

确定。所以我想通了我自己。

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

大家说,试图帮助,感谢您抽出宝贵的时间!

如果有人想用这个例子或将来的应用程序的代码,随意评论,让我知道,我可以设置不同的页面用一个例子和说明和来源。

其他提示

很可能你想要的

.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, "");

创建一个替代串并立即把它扔远。

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

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

零和9之间匹配

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

我原先的修复将导致曾经小区具有相同的值的原因是因为jQuery的$方法返回每其中给定的选择相匹配的元素。但是,调用VAL()将只能得到你的第一个匹配元素的值,而是通过调用VAL(值)的设定值将设定值的每一个的匹配的元素。

的解决方案是执行上述更换各(),然后将只消毒单个元素(this)。如果还希望消毒的总计的细胞,然后,你会做在各(),并使用".ttl" + 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\-那么你应该是部分更改为“<=>”(即<=>)。在字符类的端部A <=>将匹配<=>,其他地方被看作是一个范围,除非你转义(<=,>)。

Dollar ($) is used to mark the end of a regex search. /[A-Za-z$-,]/ may not work well. Escape the dollar with a backslash (\$).

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top