.each () не повторяется правильно - PullRequest
1 голос
/ 09 ноября 2011

Я боролся с этой проблемой уже несколько часов, не понимая, какое у меня поведение.Я не нашел этой проблемы ни в одном другом сообщении (хотя я нашел много связанных с .each() методом).

В любом случае, я здесь:

Это HTML-код, на который нужно перейти:

<input type="text" id="investment" /><br />
<table id="fundTable">
        <tr> 
             <td class="rentability"> <span class="someClass"> 0.12 </span> </td>
             <td class="absoluteResult"></td>
        </tr>
        <tr> 
             <td class="rentability"> <span class="someClass"> 0.24  </span> </td>
             <td class="absoluteResult"></td>
        </tr>
        <tr>
            ...
</table>

Идея такова: пользователь введетзначение в textField #investment.onChange, JQuery будет заполнять столбец таблицы .absoluteResult путем умножения введенного пользователем значения на .rentability.

Тогда вот часть JQuery:

$('#investment').change(function() {
        var investment = $('#investment').val(),
            currentlyDisplayedRentability,
            updatedAbsoluteResult

        $('#fundTable tr').each(function(index, tableRow) {
            currentlyDisplayedRentability = $(tableRow + "span").html()
            currentlyDisplayedRentability = parseFloat(currentlyDisplayedRentability)
            updatedAbsoluteResult = currentlyDisplayedRentability * investment
            $(tableRow + "td[class=absoluteResult]").html(updatedAbsoluteResult)
        })
    })

В результате все строки .absoluteResult заполняются с использованием значения первой строки столбца .rentability.Только одно значение используется для всего умножения.Это как если бы .each() правильно перебирает один столбец (.absoluteResult), а другой - нет (.rentability).

Я не понимаю, почему.

Ответы [ 3 ]

2 голосов
/ 09 ноября 2011

Я думаю, проблема в том, как вы используете селекторы для поиска в каждой строке таблицы; вместо

$(tableRow + "span").html()

попробовать

$(tableRow).find("span").html()
2 голосов
/ 09 ноября 2011

Это работает ..

$('#investment').bind('keyup', function() {
var a = $(this).val();
if (!isNaN(parseFloat(a)) && isFinite(a)) {
    $('table tr').each(function() {
        var x = $(this).find('td.rentability .someClass').html();
        $(this).find('.absoluteResult').html(x * a);
    });
}
else { $('.absoluteResult').html(''); }
});

Вот скрипка для проверки http://jsfiddle.net/BcjMj/

1 голос
/ 09 ноября 2011

Попробуйте это:

$('#investment').change(function() {
        var investment = parseFloat($('#investment').val());

        $('table tr').each(function() {
            var $tr = $(this);
            var rentability = parseFloat($tr.find('.someClass').text());

            $tr.find('.absoluteResult').html(investment * rentability);
        })
    })

код: http://jsfiddle.net/qYSAH/1/

...