2009-08-03 75 views
0

好吧,考慮到正則表達式工作不正常,沒有錯誤,我會嘗試使用錢面具。使用maskMoney輸入插件 - 仍然需要一些幫助

目標仍然只允許數字字符和小數。用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來創建一個大表,並添加了多個類。必須將多個類拆分爲一個數組,然後才能夠選擇每個類作爲自己的類。

+0

我更新了我的答案,以解決您在使用第一次嘗試時遇到的其他錯誤。 HTH,如果它不起作用/不清楚,請留下我對該答案的評論。 – Sean 2009-08-03 16:28:48

回答

0

好的之間

匹配。所以我自己想清楚了。

使用maskMoney(),我可以控制輸入哪些字符,並且仍然能夠正確計算表格。

我不得不這樣做修復計算中,揭露了.gasamount:

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

這是固定的計算題。 ^^掩碼導致兩行總數出現問題,這兩行導致計算中斷。


   $('.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)); 
      }); 

大家說,試圖幫助,感謝您抽出寶貴的時間!

如果任何人想使用這個例子或代碼爲未來的應用程序,請隨時發表評論,讓我知道,我可以設置一個不同的頁面與示例和說明和來源。

-2

美元($)用於標記正則表達式搜索的結尾。 /[A-Za-z$-,]/可能無法正常工作。用反斜槓(\$)逃離美元。

+0

感謝您的小技巧,但我在其他應用程序上使用相同的應用程序,它的作用就像一個魅力!我補充說,但仍然有效。可能是更好的方法! – 2009-08-03 15:38:07

+1

這顯然是錯誤的。 `$`在字符類中沒有特殊含義,所以轉義它不會改變任何東西。 – Tomalak 2009-08-04 14:05:01

0

編輯︰我原來的答案是部分正確的,因爲它改變了價值,但它並沒有解決一個更嚴重的錯誤,我現在將解釋。

我原來的修復會導致單元格具有相同的值的原因是因爲jQuery $方法返回每個匹配給定選擇器的元素。但是,調用val()只會得到第一個匹配元素的值,但通過調用val(value)設置值將每匹配元素的值設置爲

解決方法是在each()之上進行替換,然後僅對一個元素(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

嗨,肖恩。我實際上使用了與你完全相同的方法,這就是我正在返回的方法。 http://mercury.hamilton.edu/devmpstone/forms-pdf/employee-expense-report.cfm 這很有趣,從來沒有見過它。 希望你有個想法,我現在不在! – 2009-08-03 15:56:51

+0

我試過你的編輯版本,這次我什麼也沒有返回。謝謝你盡力幫忙。如果我找到解決方案,我一定會在這裏發佈。 – 2009-08-03 17:07:59

3

這是極有可能要

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

,而不是

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

後者則表達式匹配:從

  • 所有字符 「A」 到 「Z
  • 來自「」的所有字符「到」 z
  • 所有字符從」 $「到」 ,「(有這樣的範圍,但我不知道這是你的真實意圖)

前者表達(注移位破折號)匹配:從

  • 所有字符 「A」 到 「Z
  • 所有字符從 「a」 到 「z
  • 字符 「$
  • 字符 「,
  • 字符 「-

破折號具有字符類具有特殊意義,它定義了一個範圍。如果要匹配文字短劃線,請將其移至角色類的結尾(或起始處)。

編輯:除此之外,你似乎想設置的值。通過val()作品通過將新值進入功能設置:

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

本聲明:

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

創建一個字符串替換,並立即它扔了出去。

+0

嗨,湯姆,我試過使用你的修復,仍然沒有結果。我認爲這可能是我在哪裏放置替代品的事情。也許在事件之外。嗯。 – 2009-08-04 14:33:03

1

可能有點簡單但爲什麼不使用否定? Perl語法:不確定JavaScript。

何不: 米/([^ 0-9] +)//克零和九