Search code examples
jqueryarraysfill

jquery how to fill up an array


i am in mobile app and i want to fill up an array with values from checkboxes.

my code is

if (row.flatdescription == flatdescription) {
    if (row.receiptno == 0){
        items.push('<input type="checkbox" name="code_'+ i +'" id="code_'+ i +'" value="' + row.amount + '" previous="' + row.pastpayments + '" barcode="' + row.barcode + '" todayp="' + row.todaypayments + '"/><label for="code_'+ i +'">' + row.period +'..........'+ row.amount+'</label></br>');
    }
    allbarcode[i] = row.barcode;
    previouspayments1 = previouspayments1 + row.pastpayments;
    previouspayments = previouspayments1.toFixed(2);
    sofeilon1 = sofeilon1 + row.amount;
    sofeilon = sofeilon1.toFixed(2);
    total1 = total1 + row.amount - row.pastpayments;
    total = total1.toFixed(2);
}

and my array code

function barcodeTotal() {
    barcode = [];
    barcodeamount = [];
    barcodeprevious = [];
    $("input:checked").each(function(i) {
        barcode[i] = $(this).attr("barcode");
        barcodeamount[i] = $(this).attr("value");
        barcodeprevious[i] = $(this).attr("previous");
    });
}

my goal is to fill barcode array like this

barcode [barcode: barcode, amount: value, previous: previous, ....

i will appreciate your answers


Solution

  • You can transform your checked input fields into an array easily:

    var checkedInputs = $("input:checked") // this contains the raw HTML-Elements
    

    Now, depending on the desired result you may either harvest the values separately

    var barcodes  = checkedInputs.map(function() { return $(this).attr('barcode')  })
    var amounts   = checkedInputs.map(function() { return $(this).attr('amount')   })
    var previouss = checkedInputs.map(function() { return $(this).attr('previous') })
    

    or, what might be even better, as objects just like twilson suggested

    var results = checkedInputs.map(function() {
      return {
        barcode:  $(this).attr('barcode'),
        amount:   $(this).attr('amount'),
        previous: $(this).attr('previous')
      }
    })
    

    In this case you want the this to be taken from inside of the function call, as it refers to the object, you matched with the $('input:checked') call. If you store var self = this as twilson suggested, you would not receive the actual values of the input box, but no values, as the this of the calling context is most likely not an HTMLElement at all.