jquery如何填充数组

时间:2012-02-11 07:27:33

标签: jquery arrays fill

我在移动应用程序中,我想填充一个包含复选框值的数组。

我的代码是

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);
}

和我的数组代码

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");
    });
}

我的目标是像这样填写条形码数组

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

我将非常感谢您的回答

3 个答案:

答案 0 :(得分:4)

您可以轻松地将已检查的输入字段转换为数组:

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

现在,根据所需的结果,您可以单独收获

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') })

或者,甚至可能更好,就像twilson建议的对象一样

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

在这种情况下,您希望this来电中取出function, 当它引用该对象时,您与$('input:checked')调用匹配。 如果您将var self = this存储为twilson建议,则不会收到输入框的实际值,但没有值,因为调用上下文的this很可能不是HTMLElement at所有

答案 1 :(得分:1)

最好使用一组对象,而不仅仅是一个数组。

var self = this; // Important because 'this' may change in scope.
var barcodes = []

$("input:checked").each(function(index, item) {
    barcodes.push({
        barcode: $(self).attr("barcode"),
        amount: $(self).attr("value"),
        previous: $(self).attr("previous")
    });
});

然后你会得到一个像这样的数组:

[
    { barcode: "5049383", amount: "4", previous: "17263742" },
    { barcode: "5049389", amount: "1", previous: "1726376" }
]
  1. var关键字放在函数内部,否则它们将是全局的。
  2. 调用附加函数时,
  3. var self = this;通常是一种很好的做法,因为this的范围可能会根据您的执行点而发生很大变化,通常会成为主要的jQuery对象。 self会将指针返回到您希望与之交谈的内容。

答案 2 :(得分:0)

这会对你有所帮助

var arrBarCodeDet = new Array();
var objCheckedElem = $("input:checked");
$.map(objCheckedElem,function(elem,index){
    /**
        Result As Object
        arrBarCodeDet[index] = [{'barcode':$(elem).attr("barcode")},{'barcodevalue':$(elem).attr("barcodevalue")}];
    */
    //Result As Arrray
    arrBarCodeDet[index] = new Array();
    arrBarCodeDet[index]['barcode'] = $(elem).attr("barcode");
    arrBarCodeDet[index]['barcodevalue'] = $(elem).attr("barcodevalue");

})

});

<input type="checkbox" name="check1" value="1" checked="checked"  barcode="12233"  barcodevalue="12"  />Check Box 1 <br />
<input type="checkbox" name="check2" value="1" checked="checked"  barcode="45451"  barcodevalue="24"  />Check Box 2 <br />
<input type="checkbox" name="check3" value="1" checked="checked"  barcode="34343"  barcodevalue="36"  />Check Box 3 <br />
<input type="checkbox" name="check4" value="1"  barcode="32333"  value="48"  />Check Box  <br />

结果将是 arrBarCodeDet [ 阵列[0] 条形码:“12233” 条形码:“12” 长度:0 proto :数组[0] , 阵列[0] 条形码:“45451” 条形码:“24” 长度:0 proto :数组[0] , 阵列[0] 条形码:“34343” 条形码:“36” 长度:0 proto :数组[0] ]