2016-02-02 64 views
1

我的腳本應計算表中的值,但它不能代替'%'字符並顯示'未定義'。我試過一些解決方案,但沒有運氣。jQuery計數百分比 - 顯示「未定義」

我做了一個小提琴:fiddle

$('table .ilosc, table .cena_netto .stawka_vat').on('keyup paste change', function() { 
     $('table tr').each(function() { 
      var ilosc = $(this).find('input.ilosc').val(); 
      var cena_netto = $(this).find('input.cena_netto').val(); 
      var wartosc_netto = (ilosc * cena_netto); 
      $(this).find('input.wartosc_netto').val(wartosc_netto); 
      var stawka_vat = $(this).find('input.stawka_vat').val().replace('%', ''); 
      var kwota_vat = (wartosc_netto * (stawka_vat/100)); 
      $(this).find('input.kwota_vat').val(kwota_vat); 
      var wartosc_brutto = (wartosc_netto + kwota_vat); 
      $(this).find('input.wartosc_brutto').val(wartosc_brutto); 
     }); //END .each 
    return false; 
}); // END change 

它正常工作,直到行:$(this).find('input.wartosc_netto').val(wartosc_netto);

+1

您確定這個值是一個INT嗎? –

+0

這不是,可能我需要parseInt它,但它顯示「undefined」後「替換」。但我不知道爲什麼... – joryl

+0

先將ilosc和cena_netto設置爲INT,然後再進行計算。你不能有一個公式不INT值 –

回答

1

我想我找到了......你做的每一個上的所有<tr>行。第一行是標題。所以它不會找到任何值。將該行替換爲<thead>,然後undefined錯誤不會發生。當發生這樣的錯誤時,腳本的其餘部分將停止。

更好的是給<tr>一個類,然後遍歷類。

你要知道,做一個回落,當在你做替換

+0

您不能用''代替'',它需要更多的工作。 – Jordumus

1

阿爾文·巴克是接近被發現沒有價值,但它需要多一點的調整。

問題是,您運行的每一行,包括標題行。標題行不包含您想要的值,所以它會運行到錯誤中,並且JavaScript會停止對錯誤執行。

一個簡單的方法來解決這個問題,通過檢查,如果你的標題行中:

$('table .ilosc, table .cena_netto .stawka_vat').on('keyup paste change', function() { 
     $('table tr').each(function() { 

      //NEW CODE HERE: 
      //Pseudo code: if this row contains <th>-elements, 
      //then don't bother with it and move on to the next row. 
      if ($(this).find('th').length > 0) 
       return; 

      var ilosc = $(this).find('input.ilosc').val(); 
      var cena_netto = $(this).find('input.cena_netto').val(); 
      var wartosc_netto = (ilosc * cena_netto); 
      $(this).find('input.wartosc_netto').val(wartosc_netto); 
      var stawka_vat = $(this).find('input.stawka_vat').val().replace('%', ''); 
      var kwota_vat = (wartosc_netto * (stawka_vat/100)); 
      $(this).find('input.kwota_vat').val(kwota_vat); 
      var wartosc_brutto = (wartosc_netto + kwota_vat); 
      $(this).find('input.wartosc_brutto').val(wartosc_brutto); 
     }); //END .each 
    return false; 
}); // END change 

替代解決方案

你也能適應(由@SlashmanX的評論啓發)你的html位:

把你的第一行放在一個<thead>元素中。就像這樣:

<table> 
    <thead> 
     <tr> 
      <th>Lp.</th> 
      <th>Nazwa towaru lub usługi</th> 
      <th>Jednostka</th> 
      <th>Ilość</th> 
      <th>Cena netto</th> 
      <th>Wartość netto</th> 
      <th>Stawka VAT</th> 
      <th>Kwota VAT</th> 
      <th>Wartość brutto</th> 
     </tr> 
    </thead> 
    <!-- All data rows below --> 
</table> 

然後你就可以適應你的JavaScript是這樣的:

$('table .ilosc, table .cena_netto .stawka_vat').on('keyup paste change', function() { 

     //Subtle difference in this line: Spot the '>' in the selector! 
     $('table>tr').each(function() { 
      var ilosc = $(this).find('input.ilosc').val(); 
      var cena_netto = $(this).find('input.cena_netto').val(); 
      var wartosc_netto = (ilosc * cena_netto); 
      $(this).find('input.wartosc_netto').val(wartosc_netto); 
      var stawka_vat = $(this).find('input.stawka_vat').val().replace('%', ''); 
      var kwota_vat = (wartosc_netto * (stawka_vat/100)); 
      $(this).find('input.kwota_vat').val(kwota_vat); 
      var wartosc_brutto = (wartosc_netto + kwota_vat); 
      $(this).find('input.wartosc_brutto').val(wartosc_brutto); 
     }); //END .each 
    return false; 
}); // END change 

還是那句話:信貸SlashmanX指出這一點。

+0

無法OP僅僅用''替代第一個''? – SlashmanX

+0

@SlashmanX不是你認爲他可以的方式:在''裏面,他需要他現在擁有的''(參見[允許的內容](https://developer.mozilla.org/en-US/) docs/Web/HTML/Element/thead#Usage_context))。然後,他還需要一個'',他在那裏放置內容行,然後他只能過濾''。 – Jordumus

+0

但這是一個簡單的變化,更正確地看待它,因爲它是表格的頭部。只需用'table tbody tr'替換他的選擇器。 – SlashmanX