2014-02-07 5 views
0

Итак, у меня есть php-массив, который я кодирую JSON и передаю JQuery. В основном я использую информацию из массива, чтобы динамически изменять содержимое одного раскрывающегося списка на основе значения другого раскрывающегося списка. Я сталкиваюсь с некоторыми проблемами с JQuery, хотя JQuery для меня довольно новичок.Итерация через php-массив в jQuery

Во-первых мой PHP:

<?php 
$sql = mysql_query("SELECT * FROM menu") or die(mysql_error()); 

$menuItems = array(); 
$x   = 0; 
while($row = mysql_fetch_object($sql)) 
{ 
    $menuItems[$x]['ID']  = $row->ID; 
    $menuItems[$x]['parent'] = $row->parent; 
    $menuItems[$x]['name']  = $row->Name; 
    $menuItems[$x]['header'] = $row->header; 
    $menuItems[$x]['Sort']  = $row->sort; 

    $x++; 
} 
?> 

Этот код возвращает массив ~ 30 пунктов меню.

Тогда мой JQuery:

<script> 
    var menuItems = <?php echo json_encode($menuItems); ?>; 

    $('#dropdown1').change(function(){ 
      if($('#dropdown1').val() == 0){ 
       $('dropdown2').children().remove().end() 

       for(var x = 0; x < menuItems.length; x++){ 
        if(menuItems[x]['header'] == 1){ 
         $('#dropdown2').options[menuItems[x]['sort']] = new Option(menuItems[x]['name'], menuItems[x]['sort']); 
        } 
       } 
      } 
     }); 
</script> 

То, что я хочу, чтобы это сделать, когда dropdown1 изменяется, параметры dropdown2 в удаляются, а затем заселен с конкретными вещами из массива.

В настоящее время этот код действительно удаляет параметры dropdown2 при изменении dropdown1, но перенаселение просто не работает. Из того, что я могу сказать при тестировании, цикл for для итерации по массиву вводится только один раз, несмотря на то, что в нем около 30 элементов, и я полагаю, что это была моя главная проблема.

Что я здесь делаю неправильно?

+0

PHP работает на сервере при создании страницы. Содержимое 'menuItems' не будет изменяться динамически. Вам нужно использовать AJAX для получения нового набора элементов меню с сервера. – Barmar

+1

Что делает '$ ('# dropdown2'). Options []' do ???? У вас есть плагин, о котором вы нам не рассказываете, или вы путаете объекты jQuery с собственными элементами DOM. – adeneo

+0

1. Это объект javascript, а не «php-массив». 2. Вы, кажется, недопонимаете, что «jQuery» является основой для javascript, а не другим языком. У вас может быть javascript без jQuery, но вы не можете иметь jQuery без javascript. Ваш код - это javascript, использующий некоторые части рамки jQuery, но такие вещи, как циклы и т. Д., Не должны передавать jQuery вообще. – h2ooooooo

ответ

0

Так что из комментариев возникла некоторая путаница в том, что я имел в виду, и я извиняюсь. Это был один из примеров, когда объяснение имело смысл для меня, но я просто не должен был все хорошо относиться.

Чтобы убрать немного путаницы. Массив, который был передан из кода PHP в javascript, содержал все, что мне когда-либо понадобилось для второго выпадающего списка.

Как многие отметили, что .options [] был виновником того, почему код не выполнялся. Это было просто из другого примера, который я нашел, и с моими ограниченными знаниями я предположил, что это правильно, и это не так.

Я вместо этого использовал функцию .append(), и теперь кажется, что они работают нормально.

0

изменить его

for(var x = 0; x < menuItems.length; x++){ 
     if(menuItems[x]['header'] == 1){ 
      var option = $('<option />', { 
        text : menuItems[x]['name'], 
        value: menuItems[x]['sort'] 
      }); 
      $('#dropdown2 option[value="'+[menuItems[x]['sort']]+'"]').replaceWith(option); 
     } 
} 

$('#dropdown2').options[] не действует, так как JQuery не те методы, что это для простых узлов JS DOM.

Смежные вопросы