【问题标题】:Jquery inside foreach loopforeach循环中的Jquery
【发布时间】:2011-05-07 19:44:02
【问题描述】:

我在 foreach 循环中有这个 jquery 代码。基本上,变量 $perf 在每个循环中都会获得一个新值。如何使用 jquery 显示每个循环的不同 $perf 值?有可能吗?

    foreach ($perfs as $perf):

    <script type="text/javascript">

    $(document).ready(function(){

    var performerName = $(".transparency").data('title'); 

    var divcontent = $(".transparency").html();

    if ( divcontent == '&nbsp;' ){

    $(".transparency").html(''+performerName+''); 

    }

    });

    </script>

   <div class="transparency" data-title="<? echo $perf; ?>">&nbsp;</div>

   endforeach;

【问题讨论】:

  • 你为什么在这里首先使用jQuery,它似乎没有任何好处。不能直接输出元素里面的名字吗?
  • 没错,名称在页面的 seo 中毫无意义,这就是为什么我希望它们与 jquery 一起放置
  • 这是个愚蠢的理由。只需摆脱脚本。

标签: php jquery


【解决方案1】:

你应该这样做:

<?
foreach ($perfs as $perf):
?>
    <script type="text/javascript">
    $(document).ready(function(){
       var $perf = "<? echo $perf; ?>"; //Get from php
       alert($perf); //Show it
       //Here goes the rest of your script
       var performerName = $(".transparency").data('title'); 
       var divcontent = $(".transparency").html();
       if ( divcontent == '&nbsp;' ){
         $(".transparency").html(performerName); 
       }
    });
    </script>

   <div class="transparency" data-title="<? echo $perf; ?>">&nbsp;</div>
<?
   endforeach;
?>

就是这样。它有效。

(我尝试至少尽可能修改您的代码,因为我不知道是否可以删除部分)

PS:会有更多“优雅”的解决方案,你想要一个吗?还是这样就够了?

【讨论】:

    【解决方案2】:

    您能描述一下您要做什么吗?我大约 90% 确定任何 javascript、jQuery 或其他方式的原因都是零。

    为什么不这样做呢?

    <?php
    foreach($perfs as $perf)
    {
        echo "<div class='transparency' data-title='$perf'>$perf</div>";
    }
    ?>
    

    除非您尝试做更多的事情,否则您根本不需要 javascript。即使您确实需要 javascript,也可以将函数从循环中取出,并在每次迭代时调用一次。您不需要多次定义完全相同的函数。

    我建议您研究一下服务器和客户端脚本之间的关系。对于初学者 - 看看你的 PHP 生成的 HTML 源代码,看看是否有任何接近你想要的东西。另外,阅读有关 ajax 的信息。您似乎正在尝试以需要额外 HTTP 请求(ajax 调用)的方式组合 PHP/javascript

    【讨论】:

      【解决方案3】:

      如果没有 AJAX,就不可能让 PHP 和 javascript 直接交互,而且如果不进一步了解您想要发生的事情,就很难回答这个问题。

      如果您想为$perfs 的每个值使用不同的transparacy div,您可以使用:

      <?php foreach ($perfs as $perf) { ?>
         <div class="transparency" data-title="<?php echo $perf; ?>">&nbsp;</div>
      <?php } ?>
      

      你可以使用 jquery .each() 来遍历 div

       $(".transparency").each( function() {
          var performerName = $(this).data('title');
          // do stuff //
       });
      

      如果您只想将 $perfs 中的值传递给您可以使用的 javascript 函数

        var perfs = <?php echo json_encode($perfs); ?>;
      

      好的,我想我明白你现在要做什么了。你会想要这样的东西:

      <script type="text/javascript">
      
      $(document).ready(function(){
      
           var perfs = <?php echo json_encode($perfs); ?>;
      
           $.each( perfs, function( index, value ) {
      
               $( ".transparency" ).append( value+'<br>' );
      
           } );
      
      } );
      
      </script>
      
      <div class="transparency"></div>
      

      这将在transparency div 中输出$perfs 的每个值。

      使用 JQuery eachappend

      您永远不会希望将整个script 包装在foreach 循环中,因为这将为数组中的每个元素创建一个单独的脚本。使用json_encode,您可以将 PHP 数组更改为 javascript 对象,您可以使用它做任何您想做的事情。

      请记住,javascript 只能访问使用echo 或类似名称写入页面的元素。当您在浏览器中查看“查看页面源代码”时,您所看到的都是您的脚本能够使用的所有内容。

      【讨论】:

      • Ty,这就是我想要做的,将 $perfs 中的值传递给我的 javascript,这样我就可以在循环中获得不同的人。如果我不能这样做,则 perf 到处都有循环的最后一个值
      • @webmasters - 我已经添加了更多细节,因为我认为我知道您想要做什么。
      猜你喜欢
      • 2011-07-12
      • 1970-01-01
      • 2013-05-27
      • 1970-01-01
      • 2021-05-28
      • 2016-08-10
      • 2015-06-20
      • 1970-01-01
      相关资源
      最近更新 更多