Как создать таблицу расходов с помощью HTML-таблиц и jQuery?

Я создаю калькулятор бюджета и нахожусь на том этапе, когда хочу позволить пользователю построить таблицу своих расходов.

Для них в таблице изначально задано три: Аренда, Вода и Электричество/Газ. После того, как последняя строка является кнопкой, они могут щелкнуть, чтобы добавить новую строку после текущей последней строки.

Вот моя проблема. Я хочу, чтобы пользователь мог вводить свои расходы в ЛЮБОЙ из трех столбцов, которые я предоставляю: раз в две недели, ежемесячно или ежегодно, потому что они могут знать эти конкретные расходы только за один из этих периодов времени, поэтому я хотел бы чтобы сделать расчет для них, автоматически, для других ячеек.

Я не уверен, как подойти к этому. Есть ли доступный плагин или библиотека, которая будет имитировать электронную таблицу Excel, где я могу определить конкретное уравнение для КОЛОННЫ, чтобы любые значения, введенные в этот столбец, соответствующим образом обновляли другие столбцы, и не имеет значения, какой из них (раз в две недели, ежемесячно, ежегодно) они использовали?

Вот некоторый соответствующий код из этого Fiddle текущего снимка моего кода:

<table class="moneyTable width100" id="expenses">
    <tr>
        <td class="deleteCell fill-white"></td>

        <td class="right-border fill-white width50">
            <h3>Expense Type</h3>
        </td>

        <td class="fill-white">
            <h3>Bi-Weekly</h3>
        </td>

        <td class="fill-white">
            <h3>Monthly</h3>
        </td>

        <td class="fill-white">
            <h3>Annually</h3>
        </td>
    </tr>

    <tr>
        <td class="deleteCell">
            <h4 class="delete"><a class="deleteRow">[x]</a></h4>
        </td>

        <td class="right-border"><input class="expense"
        type="text" value="Rent" width="50"></td>

        <td><input class="expense currency" disabled="disabled"
        placeholder="0" type="text" width="50"></td>

        <td><input class="expense currency" disabled="disabled" placeholder="0" type="text" width="50"></td>

        <td><input class="expense currency" disabled="disabled" placeholder="0" type="text" width="50"></td>
    </tr>

    <tr>
        <td class="deleteCell">
            <h4 class="delete"><a class="deleteRow">[x]</a></h4>
        </td>

        <td class="right-border"><input class="expense" id="titleWater"
        type="text" value="Water" width="50"></td>

        <td><input class="expense currency" placeholder="0"
        type="text" width="50"></td>

        <td><input class="expense currency" placeholder="0"
        type="text" width="50"></td>

        <td><input class="expense currency" placeholder="0"
        type="text" width="50"></td>
    </tr>

    <tr>
        <td class="deleteCell">
            <h4 class="delete"><a class="deleteRow">[x]</a></h4>
        </td>

        <td class="right-border"><input class="expense" id="titleElectric"
        type="text" value="Electric/Gas" width="50"></td>

        <td><input class="expense currency" placeholder="0"
        type="text" width="50"></td>

        <td><input class="expense currency" placeholder=
        "0" type="text" width="50"></td>

        <td><input class="expense currency" placeholder=
        "0" type="text" width="50"></td>
    </tr>

    <tr>
        <td class="deleteCell"></td>

        <td class="right-border">
            <h3><a class="addRow">(Add Row)</a></h3>
        </td>

        <td></td>

        <td></td>

        <td></td>
    </tr>

    <tr>
        <td class="deleteCell fill-white"></td>

        <td class="right-border fill-white">
            <h3>Total Expenses</h3>
        </td>

        <td class="fill-white">
            <h4 id="bwNet"></h4>
        </td>

        <td class="fill-white">
            <h4 id="monNet"></h4>
        </td>

        <td class="fill-white">
            <h4 id="annNet"></h4>
        </td>
    </tr>

$(document).ready(function() {
    $('#expenses input:gt(0)').keyup(function() {
        $(this).closest('td').siblings('td').not(':first').find('input').not(this).val($(this).val());
    });
});

$(document).ready(function () {
    $("a.deleteRow").live('click', function (){
        $(this).parent().parent().insertBefore();
    }); 
    $("a.addRow").live('click', function (){
        $("table.moneyTable tr:last").prev('tr').before("<tr class='bottom-border'><td class='deleteCell'><a class='deleteRow'><h4 class='delete'>[x]</h4></a></td><td class='right-border label'><input class='expense' type='text' width='50' placeholder='(...)' /></td><td><input class='expense currency' type='text' width='50' placeholder='0' /></td><td><input class='expense currency' type='text' width='50' placeholder='0' /></td><td><input class='expense currency' type='text' width='50' placeholder='0' /></td></tr>");
    }); 
});

person Jon    schedule 17.08.2012    source источник


Ответы (2)


Я никогда не сталкивался с автоматическим сценарием электронных таблиц, который делал бы это автоматически за вас. Но этот расчет можно сделать с помощью ручного скрипта. Однако правильный подход не должен быть равенством для столбцов. При включении необходимо выполнить расчет, сначала вычислив базовые ежегодные расходы для всей строки. Затем вы .val() для каждого td-> input соответственно. 1/52, 1/12 и 1/1. Конечно расчет первого основного (годового) расхода зависит от того, в какое поле делается ввод (х52, х12 или х1)

person Martin van Dam    schedule 17.08.2012

Вы можете использовать этот метод: когда значение ввода изменяется, все пересчитывается.

input.onchange = function () {
   // select all values from rows and calculate total
}
person Ibu    schedule 17.08.2012
comment
Я не думаю, что этот ответ актуален, потому что вопрос Джонса касается того, как должен выполняться расчет или есть ли какая-либо библиотека, автоматизирующая эту возможность. Кстати, для запуска расчета лучше использовать jquery 'keyup' вместо js 'onchange' - person Martin van Dam; 18.08.2012
comment
keyup будет срабатывать после каждого нажатия клавиши, даже excel этого не делает, а jquery - это javascript - person Ibu; 18.08.2012
comment
При использовании jquery вам лучше всего использовать И определить функции jquery с селекторами $(#sel).change(function(){}); - person Martin van Dam; 18.08.2012