任何人都可以提供一些帮助。
我从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;
答案 0 :(得分:1)
BabyAzenty已经发布了一个解决方案,但我想我会写一点点试图解释这里发生的事情。
您始终在数组中发送最后一个ID的主要原因是,简而言之,JavaScript的不同标记集不会创建单独的环境;你在循环的每次迭代中创建的“id”var总是会引用相同的'id'变量(即使你用“var”“重新声明”它,也会被忽略而且原始变量被重用)。因此,当这个JS代码运行时:var id = <?php echo $row['id']; ?>;
,它会覆盖前一个值,因此它总是等于页面上声明的最后一个值。
作为一个例子,你可以看看我放在一起的jsFiddle这个行为的常见例子。基本上,我有一个循环,我创建10个按钮 - 在每个按钮上,我添加一个事件来显示一个警告框,其中包含我所在的数字按钮。正如您所看到的,每个按钮都显示“10”,因为变量“我“总是在循环的下一次迭代中得到更新,并且这些警报函数总是指向相同的值。
有多种方法可以解决这种问题 - BabyAzenty已经发布了一个解决方案,您可以在页面上存储ID的值,并在调用事件时重复使用它。
答案 1 :(得分:0)
代码中的问题是每个循环都会覆盖变量id ...
只为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>