使用maskMoney输件仍然需要一些帮助
-
11-07-2019 - |
题
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 (\$
).