在用户更新时添加AJAX表单输入

时间:2014-06-27 11:20:56

标签: javascript jquery

更新3

James,MondayTotal,是一个span标签中的Class,比如,

    <span class="TimebreakdownTotalWeek">Mon</span>
<span class="MondayTotal">0</span>

更新2

这是加载整周,周一到周日的功能,并给出总计。我试过,这个函数将'.totalhours'类改为我的mondaytotal,然后将每周的总数加载到该var中。接下来我在我的+ Count之前添加'Monday',这似乎只是将星期一的当前行添加到我的mondaytotal类中。

例如,我有三行'.Monday0','。Monday1'和'.Monday2'。我的星期一总计将保留总值,但是当您输入下一个值时会覆盖它。所以我输入1到Monday0,MondayTotal然后是1但是当你输入2进入Monday1而不是MondayTotal是3时,它只是覆盖它并且现在保持2 - 所以基本上它不会将行添加到一起。

我认为这是应该的(至少我看到它的方式,如果我错了请纠正我),每次它重置为0并且不能正确循环时它是'索引'。

 var LoadHourTotals = function(Count) {
    if (typeof Count === "undefined" ) {
        var $total = $('.TotalHours');
        var $value = $('.Input');
    } else {
        var $total = $('.'+Count);
        var $value = $('.'+Count);
    }

    $value.on('input', function (e) {
        var total = 0;
        $value.each(function (index, elem) {
            if (!Number.isNaN(parseFloat(this.value, 10))) total = total + parseFloat(this.value, 10);
        });
        $total.html(total);
    });
} //End

更新

詹姆斯,你的意思是我输入的html表单?如果是这样,它并不容易,它是使用CakePHP表单助手构建的,但是有代码,

<input name="data[0][maintime]" class="TimebreakdownInput Monday0" type="text">

然后当用户点击加载另一个表单元素时,它将添加

<input name="data[1][maintime]" class="TimebreakdownInput Monday1" type="text">

接下来,例如,

<input name="data[2][maintime]" class="TimebreakdownInput Monday3" type="text">

其他所有日子都一样。如果那不是您所要求的,请解释更多您需要的内容,

感谢。


我正在处理一个表单,该表单会添加一周输入的总数,每周总计。我在这里的帖子上找到了一个函数,只需要做一些修改就可以完成整周我想做的事情。

但是现在我正在努力将所有的日子加在一起,所以我在所有星期一,星期二等都有一个总计,而且整个星期都有一个总计(但我还没有那个工作)。

var LoadDailyTotal = function(Count) {
    var $WeekTotal = $('.MondayTotal');

    if (typeof Count === "undefined" ) {
        var $WeekValue = $('.Monday0');
    } else {
        var $WeekValue = $('.Monday'+Count);
    }

    $WeekValue.on('input', function(e) {
        var totalweek = 0;
        var currentTotal = parseFloat ($('.MondayTotal').html() );

        $WeekValue.each(function (index, elem) {
            if (!Number.isNaN(parseFloat(this.value, 10))) totalweek = totalweek + parseFloat(this.value, 10);
        });
        $WeekTotal.html(currentTotal + totalweek);
    });
}

现在,这种作品,但我不认为循环是正常的。一个加载的defult行,你输入(例如)1,然后添加新的AJAX加载行,并说你输入2,总共得3。但是如果你把第一行更新为2,它应该是4但我得到5,所以它保持总数,这是我不想要的。我需要的是更新每行的总数,用户是否以及何时更改。

很抱歉,如果我没有正确解释自己,请给我一个更改,以便更好地解释,如果需要或者您想要更多代码。

谢谢,

2 个答案:

答案 0 :(得分:2)

如果您每天都添加了一个课程,那么您可以选择所有星期一,然后将其值相加。

<input name="data[0][maintime]" class="TimebreakdownInput Monday0 Monday" type="text">
<input name="data[1][maintime]" class="TimebreakdownInput Monday1 Monday" type="text">
<input name="data[2][maintime]" class="TimebreakdownInput Monday2 Monday" type="text">

var getDayTotal = function(day){
   var days=$('.'+day);
   var total =0;
   days.each(function(){
       total+=parseFloat(this.value, 10);
   });
   return total;
}

$('.mondayTotal').html(getDayTotal('monday'));

答案 1 :(得分:0)

这是我使用的功能,它让它工作,我是的,就像Sonicdeadlock说的那样,我通过移除循环来制作所有星期一,同一个类。

  var LoadMondayTotals = function() {
    $('.TimebreakdownInput').change(function() {
        var MondayInputs = []; //Array to store all monday daily inputs
        var MondayTotals = 0; //Store Array total for display

        $(".Monday").each(function() { 
            var values = parseFloat( $(this).val() );   
            if (isNaN(values)) { values = 0; } //Set value to 0 if its not a number
            MondayInputs.push(values);
        });

        $.each(MondayInputs, function() {
            MondayTotals += this; //Count though array, add into total
        });

        $('.MondayTotal').html(MondayTotals); //Display / Add total into HTML
    });
 } //End of LoadMondayTotals

谢谢

求助