计划:
基本上我有一组服装项目存储在一个表中,每个服务项目包含“item_name”“item_id”和“item_shortcode”我希望每个服装项目都有一个链接,当用户点击链接时需要添加项目一个数组(所选数组)
我正在尝试根据我从mySQL数据库收集的数据创建一个javascript对象,然后在将div单击到我的方法时将该数据传递给函数。
这是一个例子:
<?php
while($row = mysql_fetch_array($results)){
?>
<script>
var item = new Object();
item.itemName = <?php echo json_encode($row['item_name']); ?>;
</script>
<?php
echo "<div id=\"".$row['item_name']."\" class=\"choice\" onclick=\"SetSelectedChoice(item);\">";
//echo $row['item_name'];
echo "</div>";
}
}
?>
编辑:这只是一个例子我将使用大量数据填充我的对象,而不仅仅是item_name
问题是最后一个对象似乎被分配给while循环中的每个div。
有人指出我哪里出错了吗?
答案 0 :(得分:0)
您在每次迭代时重新定义项目。为什么不这样做:
根据编辑,您可以创建一个项目数组并在循环中填充它:
<script type="text/javascript">
var objects = new Array();
</script>
<?php while($row = mysql_fetch_array($results)): ?>
<script type="text/javascript">
var item = new Object();
item.itemName = '<?php echo json_encode($row['item_name']); ?>';
objects.push(item);
</script>
<div id="<?php echo $row['item_id']; ?>" class="choice">
<?php echo $row['item_name']; ?>
</div>
<?php endwhile; ?>
然后在循环的js OUTSIDE中:
$('.choice').on('click', function(){
SetSelectedChoice($(this).html());
});
function SetSelectedChoice(name)
{
for(var i = 0; i < objects.length; i ++)
{
if(objects[i].itemName == name)
{
//do something
}
}
}
注意:我不会真的推荐这种奇怪的循环来比较名称。我只是不知道你将名字传递给这个函数还有什么。我会传递项目ID或索引值,并直接访问数组中的项而不是循环。有意义吗?
基本上,停止使用onclick。整个世界更倾向于倾听者。其次,根本不需要创建对象。你似乎没有使用它,即使你这样做,你也没有像字符串那样在名称周围加上单引号。第三,请打破php写html。它更干净,更容易。更确切地说,将项目的id分配给id参数。在元素的id中有名称和空格真的很难看。而且你似乎并不需要一个,因为你没有在你的例子中使用它。尽管如此,如果你想在点击监听器中像$(this).attr('id')
那样访问它,我会把它放在那里。
但如果我错过了这一点,也许你可以澄清一下,我可能会更新以更好地满足你的需求
答案 1 :(得分:0)
好吧,老实说我不知道我是否真的找到了你,但如果我看对了,那么你只需在while循环的每次运行中覆盖item-object。 在最后一个循环之后(在输出之后),变量“item”被设置为循环的最后结果,因此单击任何div将返回“item” - 循环的最后一项。
作为解决方案,尝试将div中的行名称保存为参数,例如
echo "<div id=\"".$row['item_name']."\" class=\"choice\" onclick=\"SetSelectedChoice(\'".$row['item_name']."\');\">";