【问题标题】:Toggle script inside a loop only works for first iteration循环内的切换脚本仅适用于第一次迭代
【发布时间】:2016-05-10 19:15:49
【问题描述】:

这是我的 php/javascript 代码。我试图在循环中编写脚本,但它不起作用。这会生成两个按钮,一个用于本地团队,同时处理本地团队,第二个用于道路团队,同时处理道路团队。这些按钮显示包含在不同类的 div 中的信息。出于某种原因,它仅适用于本地团队,这是循环的第一次迭代。

我读过很多关于人们使用 id 而不是类的信息,但这不是我的情况。我很迷茫。

非常感谢您的帮助。

<script>
    $(".showavgloc").click(function(){
        event.preventDefault();
        $(".averageloc").slideToggle("slow");
    });
    $(".showavgvis").click(function(){
        event.preventDefault();
        $(".averagevis").slideToggle("slow");
    });
</script>
<?php
foreach ($teams as $team) { 
    if ($page=="game") { 
        if ($team==$locteam) { 
            echo "<button class='showavgloc'>Show average player</button>";
        }
        if ($team==$visteam) {
            echo "<button class='showavgvis'>Show average player</button>";
        } 
    }   
    if ($team==$locteam) {
        echo "<div class='averageloc' style='display:none'>This div has to be shown/hidden for local team</div>";
    }   
    if ($team==$visteam) {
        echo "<div class='averagevis' style='display:none'>This div has to be shown/hidden for road team</div>";
    }   
}
?>

【问题讨论】:

  • 向我们展示$teams的内容示例。
  • $teams 是一个包含两个字符串变量的数组:$teams=($locteam, $visteam)
  • $locteam$visteam 定义在哪里?
  • 您可能应该专注于生成的 HTML 页面,在这里查看它可能有助于获得更好的答案。

标签: javascript php loops


【解决方案1】:

尝试这样做:

在该 php 代码之后,关闭它之前(在这个“?>”之前),做一个“回声”,其中包含:

<script>
    $(".showavgloc").click(function(){
        event.preventDefault();
        $(".averageloc").slideToggle("slow");
    });
    $(".showavgvis").click(function(){
        event.preventDefault();
        $(".averagevis").slideToggle("slow");
    });
</script>

并尝试根据需要使用它。这在某些情况下可能会有所帮助,因为当您使用 jQuery 库然后生成 html throw 代码时,DOM 保持在“初始”版本中,因此 jQuery 无法正常工作,因为永远找不到控件。正确的顺序是:打印控件,然后绑定jQuery事件。

祝你好运

【讨论】:

  • 恐怕还是不行。第二个按钮什么也不做……无论如何谢谢你!
  • 好的,它'有点工作'!现在第二个按钮可以完美运行,而第一个按钮在单击时会做三件事:显示/隐藏/显示。或隐藏/显示/隐藏。太棒了!
  • 您可以使用浏览器控制台检查文档并告诉我您看到了什么吗?用php生成的部分有吗?
  • 这很奇怪......尝试在“event.preventDefault();”之前添加“event.stopPropagation();”我认为可以解决那个小错误
  • 是的,零件在那里。显然一切都是正确的,除了第一个按钮工作了三次......
【解决方案2】:

当所有内容都包含在内时,您的代码似乎可以正常工作:

$(".showavgloc").click(function(){
  event.preventDefault();
  $(".averageloc").slideToggle("slow");
});
$(".showavgvis").click(function(){
  event.preventDefault();
  $(".averagevis").slideToggle("slow");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button class='showavgloc'>Show average player</button>
<button class='showavgvis'>Show average player</button>
<div class='averageloc' style='display:none'>This div has to be shown/hidden for local team</div>
<div class='averagevis' style='display:none'>This div has to be shown/hidden for road team</div>

我的猜测是还有其他问题。检查您的页面以确保您的 PHP 正确打印所有元素。如果一切正常,您可以尝试使用 jQuery 的“on”函数,该函数应注意与选择器匹配的新元素。 https://api.jquery.com/on/

【讨论】:

  • 谢谢。显然,在循环外使用时它可以完美地工作。问题是这两个按钮都是通过循环生成的。
  • 如果原始按钮和 div 按预期工作,那么唯一的解释是循环没有正确生成它们。也许它没有在它应该生成的时候生成 div。您可以发布其余的 PHP 代码,其中包含设置其余变量的部分吗?您是否使用 Chrome 的检查工具检查了页面以查看是否确实存在正确的 div?
  • 终于成功了!这是关于 部分的放置。我试图把它放在代码的末尾(远低于相关循环)并且它起作用了......谢谢大家。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-26
  • 2011-09-13
  • 1970-01-01
  • 2018-03-04
  • 2021-01-07
相关资源
最近更新 更多