2012-12-06 79 views
0

计划:PHP的while循环与JS变量

基本上我有一组存储在表中服装项目每个都包含“ITEM_NAME”“ITEM_ID”和“item_shortcode”我希望能有每服链接项,当用户点击链接时需要添加到阵列(所选阵列)


我想基于关闭以创建一个JavaScript对象,我从MySQL数据库收集的数据的项目,然后将该数据传递给一个函数,当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

好了,把你的名字加上引号或者你可能最终与item.itemName =有些长字符串,将造成可怕的错误; –

+1

此外,如果没有人会因此而吼你 - 你应该切换到PDO或mysqli。mysql_函数已被弃用,并将很快被彻底清除。 –

+0

gah不知道mysql函数是否需要被取代! –

回答

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')

但是,如果我忽略了一点,也许你可以澄清,我可能会更新,以更好地满足您的需求

+0

感谢回复,请检查编辑,我有大约5个字段,我将填充该对象。 –

+1

已更新为更符合您的需求,虽然这应该仍然有一点清理。 –

0

好了,我真的不知道,如果我真的有你,但是如果我看到它,然后您只需在while循环的每次运行中覆盖项目对象。 在最后一个循环之后(在输出之后),变量“item”被设置为循环的最后结果,因此单击任何div将返回“item” - 循环的最后一项。

作为一个解决方案,试图在div作为参数保存行的名称,如

echo "<div id=\"".$row['item_name']."\" class=\"choice\" onclick=\"SetSelectedChoice(\'".$row['item_name']."\');\">"; 
+0

感谢您的回复,请检查编辑,我有大约5个字段,我将填充该对象。 –

+0

我不知道这是如何通过覆盖或通过处理参数中的项目(如我的示例中)或通过检索信息的附加函数来更改问题的原因,如Kai的示例中所述。 –