如何将php id从数组传递给javascript函数

时间:2014-02-04 01:52:36

标签: javascript php

任何人都可以提供一些帮助。

我从mysql获取数组中的信息,然后根据信息显示图像。当用户鼠标经过图像或点击时,我试图将id传递给javascript post函数,然后写入视图或点击记录。

不幸的是,javascript只有一半工作,因为它占用数组中的最后一个id并使用它而不是特定的id。我不确定如何通过具体的身份证。

我不是程序员,一直试图在没有帮助的情况下解决这个问题,我也一直在搜索这个和其他网站寻求解决方案。感谢您提供的任何帮助。

<?php

$result = $sql->query("SELECT * FROM carousel WHERE paper = 'Torch2'");

$rows = array();

while ($row = $result->fetch_assoc()) {

$rows[] = $row;

}

$i = 1;
foreach ($rows as $row):

$item_class = ($i == 1) ? 'active item' : 'item';
    echo "<div class='$item_class'>";

        echo "<div class='clicks mouseovers'>";
        echo "<a href='".$row['link']."' target='_blank'><img src='ads/artwork/".$row['filename1']."' /></a>";

        ?>
        <script>
        var id = <?php echo $row['id']; ?>;

        $("div.clicks").click(function() {
            $.post("includes/clicks_carousel",{id:id});
        });

        $( "div.mouseovers" ).on( "mouseenter", function() {
            $.post("includes/mouseovers_carousel",{id:id});
        });
        </script>
        <?

        echo "</div>";

    echo '</div>';

$i++;
endforeach;

2 个答案:

答案 0 :(得分:1)

BabyAzenty已经发布了一个解决方案,但我想我会写一点点试图解释这里发生的事情。

您始终在数组中发送最后一个ID的主要原因是,简而言之,JavaScript的不同标记集不会创建单独的环境;你在循环的每次迭代中创建的“id”var总是会引用相同的'id'变量(即使你用“var”“重新声明”它,也会被忽略而且原始变量被重用)。因此,当这个JS代码运行时:var id = <?php echo $row['id']; ?>;,它会覆盖前一个值,因此它总是等于页面上声明的最后一个值。

作为一个例子,你可以看看我放在一起的jsFiddle这个行为的常见例子。基本上,我有一个循环,我创建10个按钮 - 在每个按钮上,我添加一个事件来显示一个警告框,其中包含我所在的数字按钮。正如您所看到的,每个按钮都显示“10”,因为变量“我“总是在循环的下一次迭代中得到更新,并且这些警报函数总是指向相同的值。

有多种方法可以解决这种问题 - BabyAzenty已经发布了一个解决方案,您可以在页面上存储ID的值,并在调用事件时重复使用它。

答案 1 :(得分:0)

代码中的问题是每个循环都会覆盖变量id ...

  1. 将id保存在隐藏的div / span / a中(使用text或data-attribute)
  2. 只为click事件编写一个javascript代码并获取隐藏的div / span / a。

    foreach ($rows as $row) {
        $item_class = ($i == 1) ? 'active item' : 'item';
        echo "<div class='$item_class'>";
        echo "<div class='clicks mouseovers'>";
        echo "<a href='".$row['link']."' target='_blank'><img src='ads/artwork/".$row['filename1']."' /></a>";
        echo "<span class='hide item_id' data-item_id='".$row['id']."'></span>";
        echo "</div>";
        echo '</div>';
    
    $i++;
    }
    
    
    <script>
    $("div.clicks").click(function() {
        var item_id = $(this).children("span").data("item_id");
        $.post("includes/clicks_carousel",{id:item_id});
    });
    
    $( "div.mouseovers" ).on( "mouseenter", function() {
        var item_id = $(this).children("span").data("item_id");
        $.post("includes/mouseovers_carousel",{id:item_id});
    });
    </script>