2011-05-07 217 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調用)