在jquery中通过php数组迭代

时间:2014-02-07 17:51:54

标签: php jquery arrays json

所以我有一个php数组,我是JSON编码并交给一些JQuery。基本上我使用数组中的信息根据另一个下拉列表的值动态更改一个下拉列表的内容。我遇到了JQuery的一些问题,尽管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的选项,然后使用数组中的特定内容重新填充。

目前,当dropdown1更改但重新填充时,此代码会删除dropdown2的选项。从我在测试中可以看出,迭代遍历数组的for循环只输入一次,尽管它们中有大约30个项目,我认为这是我的主要问题。

我在这里做错了什么?

2 个答案:

答案 0 :(得分: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节点。

答案 1 :(得分:0)

所以从评论中我似乎对我的意思有些混淆,我道歉。这是解释对我有意义的一个例子,但我一定不能把所有事情都传达得很好。

澄清一点混乱。从PHP代码传递到javascript的数组包含了第二个下拉列表所需的所有内容。

许多人指出.options []是代码没有执行的罪魁祸首。这只是我发现的另一个例子,凭借我有限的知识,我认为它是正确的,但事实并非如此。

我改为使用.append()函数,现在似乎正常工作。