我遇到这个问题已经有一段时间了,似乎无法理解。我有一个下拉菜单,它是从数据库中提取的,用于显示项目的状态。
$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/AAJAX更新数据库,而不需要重新加载页面。我通过使用以下代码找到了如何做到这一点。
$(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个,它就是不起作用,我也不明白为什么。
这是我的前臂环。
<?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循环内部、外部,或者组合,但我似乎无法使其工作!如有任何帮助或建议,我们将不胜感激。
谢谢你抽出时间!
您的问题是select元素的名称不是唯一的。按原样,jQuery只将更改事件绑定到第一个select元素。您需要使用each()
$('[name="StatusList"]').each(function() {
$(this).change(function() {
//YOUR CODE
});
});
StarmontInventoryItemID也有同样的问题,必须使用next()
/prev()
/parent()
/child()
等函数才能获得其值。
此外,我建议使用Firebug或其他浏览器调试工具,这对调试javascript,尤其是ajax调用有很大帮助。