我该如何访问这个javascript元素?

时间:2015-03-19 17:38:38

标签: javascript php jquery arrays

我在PHP中有一个数组,我想用Javascript编辑。

我将它从php传递到这样的javascript:

var allPartsList = JSON.parse('<?php echo json_encode($all); ?>');

如果我console.log(all);我看到了这个:

enter image description here

我最终要做的是查找从PHP传递的行,其中partNumbersupplier这两个字段之一为空,然后将值添加回基于数组on用户提交的值。以下值由用户点击的复选框提供。

我有一个循环语句的语法:

$('input[type="checkbox"][id="supplierCheck"]').change(function() {
     if(this.checked) {

       var supplier   = this.dataset.supplier;
       var partNumber = this.dataset.partnumber;
       var x          = this.dataset.x;

       for (var i = 0; i < allPartsList.length; i++) {       
          if (allPartsList[i][0] == x) {            
            allPartsList[i][2] = supplier; //replace whatever supplier is with the supplier the user has chosen
          }       
       }      
     console.log(allPartsList);
     }
 });
但是,我的for循环失败了,因为我不知道如何访问allPartsList的各种元素。如果我console.log(allPartsList[0],我会看到

Object {line: 0, supplier: "a", partNumber: "asdf"}

所以我不确定它是否是一个我可以逐步完成的阵列。我似乎可以访问allPartsList[0],但我无法访问[0]的任何元素,例如allPartsList[0][0]。我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

您的allPartsList是一维对象数组,字符串键不是数字,因此allPartsList[i][0]不正确。

要更新循环中的属性,您可以执行以下操作:

allPartsList[i].supplier = supplier;

或阅读财产:

console.log( allPartsList[i].supplier );

我不确定您在x检查时尝试做什么,看来您想测试索引,所以在这种情况下,请对i进行测试

if (i == x) {            

旁注:您没有必要进行初始JSON解码。 PHP将生成JSON,它恰好也是有效的JavaScript。所以你可以简化为:

var allPartsList = <?php echo json_encode($all); ?>;

答案 1 :(得分:2)

根据您的日志,allPartsList是一个对象数组。您可以使用dot notation访问对象的属性。

以下是访问数组中第一个对象的供应商属性的方法:allPartsList[0].supplier

因此,请尝试将for循环更改为:

for (var i = 0; i < allPartsList.length; i++) {       
  if (allPartsList[i].line == x) {            
    allPartsList[i].supplier = supplier; 
  }  
}