我试图回应一个使用javascript从php编写的变量。基本上我有一个下拉菜单,我想要做的是回显用户选择的项目的库存数量。这是我到目前为止所做的。
<select id="selectItem" onchange="stock(this)">
<?php
--- connection here ----
$itemsStock = array();
$result = mysql_query("SELECT * FROM itemprofile");
while($row = mysql_fetch_array($result))
{
$id = $row['id'];
$stock = $row['stock'];
echo '<option value="'.$row['productname'].'" id="'.$row['id'].'">'.$row['productname'].'</option>';
$itemsStock[$id] = $stock;
}
?>
</select>
Available stock: <div id="stockRemaining"></div>
<script type="text/javascript">
var json_arr = <?php echo json_encode($itemsStock);?>;
var stockValues = JSON.parse(json_arr);
function stock(sel)
{
var itemID = sel.value;
console.log(itemID); // debug to see that you are getting the correct value
document.getElementById('stockRemaining').innerHTML = stockValues[itemID];
}
</script>
从php到jquery的数组转换很好,我试着回应它并且它工作正常,我的问题是stock()函数,我认为我在内部的动作做错了因为每次我点击一个不同的从下拉菜单中的项目,它根本不显示任何内容。我对Jscript很新,希望你们能帮助我。谢谢!
答案 0 :(得分:1)
我正在使用addEventListener
。我不知道您onchange
元素上的select
事件是否正在触发..
我修改了你的while
循环(在此代码段中的Html注释字段中)只是为了增加一致性是声明和用法..
使用(示例Php Echo数据)
document.getElementById("selectItem").addEventListener("change", stock);
//var json_arr = <?php echo json_encode($itemsStock);?>;
// you need to determine what kind of array this will actually be: i.e. sequential, non-sequential
// reference: http://php.net/manual/en/function.json-encode.php#example-3898
// I'm presuming it will be a non-sequential with this demo data.
var json_arr = '{ ' +
'\"001\" : \"12000\",' +
'\"002\" : \"7000\",' +
'\"003\" : \"200\",' +
'\"004\" : \"10\"' +
'}';
var stockValues = JSON.parse(json_arr);
function stock(ev)
{
var itemID = ev.target.selectedOptions.item().id;
console.log("%o - %o", stockValues, ev.target.selectedOptions.item().id); // debug to see that you are getting the correct value
document.getElementById('stockRemaining').innerHTML = stockValues[itemID];
}
<select id="selectItem">
<!--
<?php
--- connection here ----
$itemsStock = array();
$result = mysql_query("SELECT * FROM itemprofile");
while($row = mysql_fetch_array($result))
{
$id = $row['id'];
$stock = $row['stock'];
$productname = $row['productname'];
echo '<option value="'.$productname.'" id="'.$id.'">'.$productname.'</option>';
$itemsStock[$id] = $stock;
}
?>
-->
<option value="coke" id="001">coke</option>
<option value="pepsi" id="002">pepsi</option>
<option value="sprite" id="003">sprite</option>
<option value="drpepper" id="004">drpepper</option>
</select>
Available stock: <div id="stockRemaining"></div>
答案 1 :(得分:0)
首先将您的选择选项更改为
<select id="selectItem" onchange="stock(this)">
现在您可以获得库存函数中的值
function stock(sel)
{
var itemID = sel.value;
console.log(itemID); // debug to see that you are getting the correct value
document.getElementById('stockRemaining').innerHTML = stockValues[itemID];
}
您可能想要从PHP JSON
创建一个javascript数组var json_arr = <?php echo json_encode($itemsStock);?>;
var stockValues = JSON.parse(json_arr);
现在$ itemstock可以作为数组使用:
您可以使用:
document.getElementById('stockRemaining').innerHTML = stockValues[itemID];
如果有效,请告诉我。