在foreach循环中使用jQuery pulldown更新MySQL

时间:2013-12-08 06:48:18

标签: php jquery mysql

我一直有问题,似乎无法绕过它。我有一个下拉菜单,从数据库中提取项目状态。

$myQuery2 = "SELECT InventoryItemStatus.InventoryItemStatusID, InventoryItemStatus.InventoryItemStatusDescription FROM InventoryItemStatus";
$result2 = mysql_query($myQuery2) or die (mysql_error());
if(mysql_num_rows($result2)){ 
    $select2= '<select style="width:90px" name="StatusList">';
        while($rs=mysql_fetch_array($result2)){
                $select2.='<option value="'.$rs['InventoryItemStatusID'].'">'.$rs['InventoryItemStatusDescription'].'</option>';                        
            }
}
$select2.='</select>';

易。现在我的目标是使用jQuery / AJAX更新数据库而无需重新加载页面。我想通过使用以下代码来解决这个问题。

$(document).ready(function(){
  $('[name="StatusList"]').each(function() {
    $(this).change(function() {
    var mydata = $('[name="StatusList"]').val();//$(this).val();
    var inputdata = $('[name="StarmontInventoryItemID"]').val();
    $.ajax({   
       type: 'POST',   
       url: 'update_status/update_starmont.php',   
       data: {StatusList:mydata ,StarmontInventoryItemID:inputdata}
    });
    });
  });
});

没问题。此代码侦听下拉列表中的更改,当激活时调用脚本并相应地更新数据库。我遇到的问题让我感到疯狂,因为我需要这个下拉列表才能显示每个库存项目。例如,我在代码的开头做了一个查询,它提取了10个库存项目。然后,我做的是在PHP中的foreach,允许我分别拉出每个项目。我想要做的是为这10个项目中的每个项目显示此下拉列表,并且在更改时它将更新数据库以获取相应的库存项目。现在发生的事情是列表顶部显示的下拉列表有效,它也会按照我的意愿更新。但对于以下9,它只是不起作用,我无法弄清楚原因。

这是我的foreach循环。

<?php
if (sizeof($rows14) > 0) {
foreach($rows14 as $row14):


$myQuery2 = "SELECT InventoryItemStatus.InventoryItemStatusID, InventoryItemStatus.InventoryItemStatusDescription FROM InventoryItemStatus";
$result2 = mysql_query($myQuery2) or die (mysql_error());
if(mysql_num_rows($result2)){ 
    $select2= '<select style="width:90px" name="StatusList">';
        while($rs=mysql_fetch_array($result2)){
                $select2.='<option value="'.$rs['InventoryItemStatusID'].'">'.$rs['InventoryItemStatusDescription'].'</option>';                        
            }
}
$select2.='</select>';

echo"
<tr class='tableRowClass2'>
<td height='20'>{$row14['OnHand']}</td>
<td height='20'>{$row14['ItemName']} - {$row17['StarmontSystemID']} - {$row17['StarmontSerial']}</td>
<td height='20'>
    <form method='post'>
    {$select2}
    <input type='hidden' value='{$row14['InventoryItemID']}' name='StarmontInventoryItemID'/>
    </form>
</td>
</tr>";
endforeach;
}
?>

如您所见,当下拉列表发生更改时,我想更新具有适当状态的InventoryItemID。我不明白为什么第一个工作,但其余的后续不工作?可能是我必须设置旗帜吗?

我尝试了多种不同的东西,例如移动foreach循环内部的下拉列表的查询,在它之外,组合但我似乎无法让它工作!如有任何帮助或建议,将不胜感激。

谢谢你的时间!

1 个答案:

答案 0 :(得分:0)

您的问题是选择元素的名称不是唯一的。因此,jQuery仅将您的更改事件绑定到第一个select元素。您需要使用each()

$('[name="StatusList"]').each(function() {
    $(this).change(function() {
        //YOUR CODE
    });
});

您将遇到与StarmontInventoryItemID相同的问题,并且必须使用next() / prev() / parent() / child()等函数来获取其值。

此外,我建议使用Firebug或其他浏览器中的调试工具,这对调试javascript尤其是ajax调用有很大帮助。