1

私のスクリプトはテーブル内の値をカウントする必要がありますが、「%」文字を置き換えることができず、「未定義」と表示されます。私はいくつかの解決策を試しましたが、うまくいきませんでした。

私はフィドルを作りました:フィドル

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

4

2 に答える 2

1

私はそれを見つけたと思います...すべての<tr>行でそれぞれを実行します。最初の行はヘッダーです。したがって、値は見つかりません。その行を に置き換えると<thead>undefinedエラーは発生しません。このようなエラーが発生すると、スクリプトの残りの部分が停止します。

さらに良いのは、クラスを指定して<tr>から、クラスをループすることです。

置き換えを行う前に値が見つからない場合は、フォールバックしてください

于 2016-02-02T13:25:28.733 に答える
1

Alvin Bakker は接近していましたが、もう少し調整が必要でした。

問題は、ヘッダー行を含む各行にまたがることです。ヘッダー行には必要な値が含まれていないため、エラーが発生し、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 に感謝します。

于 2016-02-02T13:36:35.833 に答える