Умножение Javascript со значением, хранящимся в другой ячейке - PullRequest
0 голосов
/ 04 августа 2009

Обновление: финальное исправление:

        $('.gasamount').sum();
        var num = $(this).attr("id").replace(/[A-Za-z$,-]/g, "");
        $('#gasmoney'+num).val(<cfoutput>#mileage#</cfoutput> * $(this).val());
        $('.gasmoney').sum();

Что я пытался сделать:

  • Создать заданное значение для ряда ячеек.
  • Умножьте значение пользователя на сохраненную сумму.
  • Получить этот результат и отобразить значение в ячейке непосредственно под ней в следующем ряду.

Я не могу заставить это работать. Каждый раз, когда я думаю, что я близко, я возвращаю объекты или неопределенное значение.

Javascript


    $('.calc').change(function(){
        var classArray = $(this).attr('class').split(' ');

        $.each(classArray, function(){

            var totalsum = $('.'+this).sum();
            $('.ttl'+this).val(Number(totalsum).toFixed(2));

            var gas = $('.gasamount4');
            var gasAmt = gas.val() * <cfoutput>#mileage#</cfoutput>;
            var gasTot = $('gasmoney4').val(gasAmt);
            gasTot;
            alert(gasTot);
        });

        //Finding the grandtotal
        var grandTotal = $('.row26').parent().children('td:last').children( 'input');
        var sum = $('.row25').parent().children('td').children('.calc').sum();
        grandTotal.val(Number(sum).toFixed(2));
    });

ColdFusion / HTML


        <cfloop from="1" to="#ArrayLen(labels)#" index="r">
        <tr>
            <td class="labels"><cfif ArrayIsDefined(labels,r) AND labels[r] NEQ "Open">#labels[r]#</cfif></td>
            <cfloop from="1" to="7" index="i">
            <td id="Day#i#" class="row#r# col#i#">
                <cfif r EQ 1>#Left(DayOfWeekAsString(i),3)#<cfelse><cfif r EQ 2><input type="text" class="date-mask" /><cfelse><input type="text" class="calc <cfif labels[r] EQ "Personal Car: Mileage ##">gasamount#i# </cfif> <cfif labels[r] EQ "Personal Car: Mileage $">gasmoney#i# </cfif><cfif labels[r] EQ "Daily Totals">ttlC#i#<cfelse>R#r# C#i#</cfif><cfif labels[r] EQ "Grand Total">gTtl#r#</cfif>" <cfif labels[r] EQ "Daily Totals" OR labels[r] EQ "Personal Car: Mileage $">readonly="readonly"</cfif> /></cfif></cfif></td>
            </cfloop>
            <td class="totals"><cfif r EQ 1>Total<cfelse><input type="text" class="ttlR#r#" readonly="readonly" /></cfif></td>
        </tr>
        </cfloop>

Если что-то неясно, просто спросите, и я сделаю все возможное, чтобы предоставить дополнительную информацию. Спасибо.

1 Ответ

1 голос
/ 04 августа 2009

Исходя из кода, я предполагаю, что вы хотите взять число в каждой ячейке строки «Персональный пробег автомобиля», умножить его на показатель пробега пользователя и поместить результат в соответствующую ячейку в «Персональный автомобиль». Пробег $ "Строка.

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

$('input.R4').change(function () {
    var val = this.value,
    cell = this.className.match(/C\d+/)[0];

    val = parseInt(val, 10);
    val *= <cfoutput>#mileage#</cfoutput>;
    $('td.row5 input.' + cell)[0].value = val.toFixed(2);
});

Edit:

$ ('input.R4') должен выбирать каждый элемент ввода с классом "R4", поэтому это будет каждый элемент ввода в строке "Personal Car Пробег #".

Переменная «ячейка» (в ретроспективе именуется плохо) захватывает столбец ячейки, который только что изменился. Таким образом, если вы измените первое поле ввода, это будет «C1».

Ergo, $ ('td.row5 input.C1') затем захватит ввод с классом "C1" в пятой строке таблицы (строка "Personal Car Пробег $") и установит его значение в Расчетная сумма.

Итак, он уже должен работать для каждой ячейки в строке. Это возможно, потому что вы дали своим строкам, ячейкам и элементам ввода полезные имена классов - но будьте осторожны, числовые значения могут быть изменены позже. Если кто-то после того, как вы вставите новую строку в таблицу, тем самым сбросив числа, этот код, скорее всего, сломается.

Вы на правильном пути, добавив в эти слова "gasamountX" и "gasmoneyX", но я думаю, что вы должны снять с них цифры. Если вы это сделаете, вы можете изменить код на:

$('input.gasamount').change(function () {
    var val = this.value,
    column = this.className.match(/C\d+/)[0];

    val = parseInt(val, 10);
    val *= <cfoutput>#mileage#</cfoutput>;
    $('input.gasmoney.' + column)[0].value = val.toFixed(2);
});

Имеет смысл?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...