Php while循环使用js变量

时间:2012-12-06 22:00:42

标签: php jquery mysql

计划:

基本上我有一组服装项目存储在一个表中,每个服务项目包含“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。

有人指出我哪里出错了吗?

2 个答案:

答案 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']."\');\">";