2015-03-19 2 views
1

У меня есть массив в PHP, который я хочу редактировать в Javascript.Как мне получить доступ к этому элементу javascript?

я передать его из PHP в JavaScript, как это:

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

если я console.log(all); я вижу это:

enter image description here

То, что я в конечном счете пытаются сделать, это найти строки, которые имеют был передан из PHP, где одно из двух полей: partNumber или supplier пусто, а затем добавить значения обратно в массив на основе значений, отправленных пользователем. Значения ниже предоставляются флажком, который пользователь нажимает.

У меня есть синтаксис оператора цикла вниз:

$('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); 
    } 
}); 

мой цикл, однако, не удается, потому что я не знаю, как получить доступ к различным элементам allPartsList. Если я console.log(allPartsList[0] я вижу

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

, так что я не уверен, если это даже массив, который я могу пошагово. Кажется, я имею доступ к allPartsList[0], но я не могу получить доступ к элементам [0], например allPartsList[0][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); ?>; 
+0

поэтому используйте точку. Спасибо огромное! Так просто .. отлично работал :) Да, я не хотел вставлять весь html и php, что бы облегчить понимание контекста, потому что это много кода (и вроде бы бессмысленно). именно то, что я хочу, хотя сейчас. :) –

2

Согласно вашему журналу, allPartsList представляет собой массив объектов. Вы можете получить доступ к свойствам объекта, используя dot notation.

Вот как вы бы получить доступ к собственности поставщика первого объекта в массиве: allPartsList[0].supplier

Так попробуйте изменить цикл на что-то вроде:

for (var i = 0; i < allPartsList.length; i++) {  
    if (allPartsList[i].line == x) {    
    allPartsList[i].supplier = supplier; 
    } 
}  
Смежные вопросы