2011-05-07 155 views
1

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

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; 
+0

为什么你在这里首先使用jQuery,它似乎没有做任何好事。你不能直接在元素内输出名字吗? – 2011-05-07 19:49:53

+0

确实,这些名字在页面的seo中毫无意义,这就是为什么我想让它们和jquery一起放置的原因。 – webmasters 2011-05-07 19:52:43

+0

这是一个愚蠢的原因。只是摆脱脚本。 – 2011-05-07 19:53:15

回答

3

你应该做的是这样的:

<? 
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:将有更多的“优雅”的解决方案,你想要吗?或者这足够了?

+0

不工作,尝试了它,它只给我最后一个值 – webmasters 2011-05-07 20:43:51

1

它是不可能有PHP和JavaScript直接交互,而AJAX,这是很难回答的问题没有的,究竟是什么,你希望发生更多的知识。

如果你想有一个不同的transparacy DIV为$perfs每个值可以使用:

<?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或类似内容写入页面的元素。无论你在浏览器中查看“查看页面源代码”时都能看到的所有脚本都可以使用。

+0

Ty,这就是我想要做的,将$ perfs中的值传递给我的javascript,所以我可以在循环中获得不同的pers。如果我不能这样做,那么perf就会有循环的最后一个值 – webmasters 2011-05-07 20:14:13

+0

@webmasters - 我已经添加了一些更多细节,现在我_think_我知道你想要做什么。 – jisaacstone 2011-05-07 21:49:44

2

您能否介绍一下您正在尝试做的事情?我约90%确定没有任何javascript,jQuery或其他原因。

为什么不只是这样做呢?

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

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

我建议你看看服务器端和客户端脚本之间的关系。对于初学者来说 - 看看你的PHP生成的HTML源代码,看看它是否接近你想要的。另外,阅读关于ajax。似乎你正在试图结合PHP/JavaScript的方式,它需要额外的HTTP请求(AJAX调用)