2012-05-13 3 views
3

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

<table id="table1"> 
<tr> 
    <th>Item</th> 
    <th>Price</th> 
</tr> 
<tr> 
    <td>Item 1</a></td> 
    <td><input type="text" name="sum1" id="sum1" /></td> 
</tr> 
<tr> 
    <td>Item 2</a></td> 
    <td><input type="text" name="sum2" id="sum2" /></td> 
</tr> 
<tr> 
    <td>Item 3</td> 
    <td><input type="text" name="sum3" id="sum3" /></td> 
</tr> 
<tr> 
    <td>&nbsp;</td> 
    <td>Total:</td> 
    <td>$total </td> 
</tr> 
</table> 



<table id="table2"> 
<tr> 
    <th>Item</th> 
    <th>Price</th> 
</tr> 
<tr> 
    <td>Item 1</a></td> 
    <td><input type="text" name="sum1" id="sum1" /></td> 
</tr> 
<tr> 
    <td>Item 2</a></td> 
    <td><input type="text" name="sum2" id="sum2" /></td> 
</tr> 
<tr> 
    <td>Item 3</td> 
    <td><input type="text" name="sum3" id="sum3" /></td> 
</tr> 
<tr> 
    <td>Item 4</td> 
    <td><input type="text" name="sum4" id="sum4" /></td> 
</tr> 
<tr> 
    <td>&nbsp;</td> 
    <td>Total:</td> 
    <td>$total</td> 
</tr> 
</table> 

Кто-нибудь знает, если есть возможность суммировать цены на позицию для каждого входа (отдельно для table1, table2, и т.д ..) И в конце распечатать сумму предметов из всех предметов?

+0

Как у вас есть предметы с одинаковыми идентификаторами? – VisioN

+0

@VisioN это технически не сломает ничего _until_ вы пытаетесь выбрать элемент по его идентификатору. Вполне возможно написать решение этой проблемы, которая не требует этого. – Alnitak

+0

@Ryszard: Ваш HTML недопустим. Значения 'id' ** должны быть уникальными на странице: http://www.w3.org/TR/html5/global-attributes.html#the-id-attribute. Лучше всего, наверное, просто удалить' id' из элементов 'input'; они вам не нужны. Вы можете начать с 'table' и найти все элементы' input' с заданным именем или классом. (Обратите внимание, что отлично иметь несколько элементов 'input' с тем же **' name' **.) –

ответ

1

Вам понадобится манипулятор dom, например jQuery или просто javascript. Я бы дал полям класс, чтобы сделать его еще проще - скажем, «сумма». Затем вы можете захватить все «суммы» детей из родительских таблиц. Разделите их значение на int и добавьте. Не плохо.

Here's a working JS fiddle example

+0

Я знаю, что хочу слишком много, но могу ли вы дать несколько советов или примеров, я попытался это сделать, и я увидел похожие решения на основе jQuery и Mootools, но, к сожалению, я не знаком с JavaScript :( –

+0

@ RyszardS.если вы не против использования jQuery, см. этот похожий вопрос: http://stackoverflow.com/questions/10563541/simple-jquery-sum/10563597#10563597 – Alnitak

+0

@RyszardS. Я добавил ссылку в свой ответ на рабочий пример, который я сделал в jsFiddle. Он использует jQuery в качестве манипулятора DOM. – OnResolve

0

это должно быть довольно легко с JQuery, если вы можете добавить название класса под названием «постатейный» или что-то для каждого входа и имя класса «общего» в ячейку, которая должна отображать вычисленной суммы , вы можете сделать

function calculateSum(tableId){ 
var sum = 0; 
$(tableId + ' .line-item').each(function(){ 
    var value = parseFloat($(this).val().trim()); 
    if(value){ 
    sum += parseFloat($(this).val()); 
    } 
}); 
$(tableId + ' .total').html(sum); 
} 

и вызвать эту функцию с идентификатором таблицы, для которой вы хотите.

Если вы не можете добавить имя класса, это не приведет к тафферу даже одного бита, но вместо .line-item попробуйте поставить только input, он должен сделать трюк в этом сценарии. Вместо .total вы можете написать tr:last-child td:nth-child(2)

UPDATE: добавлен «ParseInt», чтобы избежать конкатенации строк

+0

OP никогда не упоминал jQuery. Кроме того, ваш код создаст конкатенированную строку, а не накопленную сумму. См. Http://stackoverflow.com/questions/10563541/simple-jquery-sum/10563597#10563597 – Alnitak

+0

@Ainitak хорошая точка с конкатенацией строк :) Однако я считаю вашу точку зрения о jQuery недействительной - вопрос был о решении, а мой был в jquery – mkk

+0

считают себя удачливыми - в пиковые времена ответы, которые дают ответ jQuery, когда специально не запрашиваются, получают массу downvoted .. ;-) – Alnitak

0

Лучше так не называть различные элементы с аналогичными идентификаторами, это недопустимый путь. Но даже если это так - вы можете выполнять вычисления для каждой таблицы, просто работая со входами в этой таблице.

Алгоритм:

  1. Вы запускаете цикл для всех < таблицы> тегов.
  2. За каждые < стол> тег вы найдете все < input> s (независимо от того, какие идентификаторы у них есть);
  3. Рассчитать общую сумму для всех входов для текущей таблицы.

Вы можете сделать это с помощью JavaScript, но лучше для вас - jQuery.

НО: не вызывайте элементы HTML DOM с похожими идентификаторами. Это не правильно!!!