3

行の特定のフィールドの自動合計を取得する関数があります。

$(function () {

    $('#add_iaDetails_table').on('change', '[name=days_0]', function () {
        var $row = $(this).closest('tr');
        var $rate = $row.find('input[name=rate_0]');
        var $days = $row.find('input[name=days_0]');
        var $cost = $row.find('input[name=cost_0]');
        var rate = parseFloat($rate.val());
        var days = parseFloat($days.val());
        $cost.val(rate * days);
    });
});

しかし、問題は、テーブルに行を動的に追加していることです。私はフィールドの名前でもあります。days_1,days_2.....rate_1,rate_2....

ここでの私の関数は、関数で指定された値と一致する最初の行のみのオートサムを計算します。days_* 、 rate_* などの追加されたすべての値を一致させる方法はありますか?解決策を提案してください。前もって感謝します。

4

5 に答える 5

1

動的コンテンツに対応するために、セレクターをもう少し柔軟にします。で始まる 名前をフィルタリングしdays_、最後にその id を動的に取得します。

このようなもの:

$('#add_iaDetails_table').on('change', '[name^=days_]', function () {
    var name = $(this).attr('name');
    var nameId = name.substr(name.indexOf('_') + 1);

    var $row = $(this).closest('tr');
    var $rate = $row.find('input[name=rate_' + nameId + ']');
    var $days = $row.find('input[name=days_' + nameId + ']');
    var $cost = $row.find('input[name=cost_' + nameId + ']');
    var rate = parseFloat($rate.val());
    var days = parseFloat($days.val());
    $cost.val(rate * days);
});
于 2013-10-17T06:22:42.323 に答える
1

次のように、セレクターで始まるを使用できます

$('#add_iaDetails_table').on('change', '[name^=days_]', function () {
        var uid = $(this).attr("name").split("_")[1]; //get the unique id from 'name' attribute
        var $row = $(this).closest('tr');
        var $rate = $row.find('input[name=rate_' + uid + ']');
        var $days = $row.find('input[name=days_' + uid + ']');
        var $cost = $row.find('input[name=cost_' + uid + ']');
        var rate = parseFloat($rate.val());
        var days = parseFloat($days.val());
        $cost.val(rate * days);
    });
于 2013-10-17T06:26:33.407 に答える
1

jQueryにはさまざまなセレクターがたくさんあります

http://api.jquery.com/category/selectors/

あなたの質問に基づいて、おそらくStarts Withリファイナーが必要です

http://api.jquery.com/attribute-starts-with-selector/

$('#add_iaDetails_table').on('change', '[name=^days_]', function () { ... }
于 2013-10-17T06:26:51.173 に答える
0

シンプルな

$(function () {

    $('#add_iaDetails_table').on('change', '[name=days_0]', function () {
        var $row = $(this).closest('tr');
        var $rate = $row.find('input[name*=rate_]');
        var $days = $row.find('input[name*=days_]');
        var $cost = $row.find('input[name*=cost_]');
        var rate = parseFloat($rate.val());
        var days = parseFloat($days.val());
        $cost.val(rate * days);
    });
});

*は、指定された文字列を含む属性を持つ任意の入力を選択することを意味するか、上記のコードで* を ^に置き換える JQUERY の startswith セレクターを使用することを意味します。

于 2013-10-17T06:29:27.277 に答える