2011-11-01 82 views
1

我剛纔在這裏問了另一個問題:global variable and reduce database accesses in PHP+MySQL 我正在使用PHP + MySQL。該頁面訪問數據庫並檢索所有項目數據,並列出它們。我正計劃打開一個新頁面,但現在我想用JavaScript代替一個pop div。但我不知道如何在新的div中利用PHP的變量。下面是代碼:在javascript中利用PHP變量

<html> 
</head> 
<script type="text/javascript"> 
function showDiv() { 
    document.getElementById('infoDiv').style.visibility='visible'; 
} 
function closeDiv() { 
    document.getElementById('infoDiv').style.visibility='hidden'; 
} 
</script> 
</head> 
<body> 
<ul> 
<?php foreach ($iteminfos as $iteminfo): ?> 
    <li><a href="javascript:showDiv()"><?php echo($iteminfo['c1']); ?></a></li> 
<?php endforeach;?> 
</ul> 
<div id="infoDiv" style="visibility: hidden;"> 
    <h1><?php echo($c1) ?></h1> 
    <p><?php echo($c2) ?></p> 
    <p><a href="javascript:closeDiv()">Return</a></p> 
</div> 
</body> 
</html> 

「iteminfos」 是從數據庫中的結果,每個$ iteminfo有兩個價值$ c1和$ C2。在「infoDiv」中,我想顯示所選項目的詳細信息。怎麼做?

感謝您的幫助!

還有一個問題:如果我想使用,例如,$ c1作爲文本,$ c2作爲img scr,$ c1也作爲img alt;或$ c2作爲href scr,該怎麼做?

回答

2

試試這個:

<?php foreach ($iteminfos as $iteminfo): ?> 
    <li> 
    <a href="javascript:showDiv(<?php echo(json_encode($iteminfo)) ?>)"> 
     <?php echo($iteminfo['c1']); ?> 
    </a> 
    </li> 
<?php endforeach;?> 

此外,修改showDiv把你的行數據:

function showDiv(row) { 
    document.getElementById('infoDiv').style.visibility='visible'; 
    document.getElementById('infoDiv').innerHTML = row['c1']; 
} 

基本上,你要考慮的是,在瀏覽器中的JavaScript執行長的PHP腳本執行後結束。因此,您必須將您的JavaScript可能需要的所有數據嵌入到網站中或在運行時抓取它(這會使事情變得更慢且更復雜)。

+0

看來引號和雙引號在這裏有問題。 – DrXCheng

+0

@xuc:啊,對,你必須在PHP中用\\和「with \」替換\,那麼它應該工作。 – thejh

+0

它用於替換「with」(而不是\「)。 – DrXCheng

0

是否要在頁面上列出多個項目的單個信息區域,並且當您單擊某個項目時,信息區域將被新內容替換?或者你想爲每個項目提供一個新的信息區域?

我看到了第一種方法的一些情況,所以我會解決後者。

<?php 
//do some php magic and get your results 
$sql = 'SELECT title, c1, c2 FROM items'; 
$res = mysql_query($sql); 

$html = ''; 
while($row = mysql_fetch_assoc($res)) { 
    $html .= '<li><a class="toggleMe" href="#">' . $row['title'] . '</a><ul>'; 
    $html .= '<li>' . $row['c1'] . '</li><li>' . $row['c2'] . '</li></ul>'; 
    $html .= '</li>'; //i like it when line lengths match up with eachother 
} 
?> 
<html> 
</head> 
<script type="text/javascript"> 
window.onload = function(){ 
    var els = document.getElementsByClassName("toggleMe"); 
    for(var i = 0, l = els.length; i < l; i++) { 
     els[i].onclick = function() { 
      if(this.style.display != 'none') { 
      this.style.display = 'block'; 
      } else { 
      this.style.display = 'none'; 
      } 
     } 
    } 
} 
</script> 
</head> 
<body> 
<ul> 
<?php 
echo $html; 
?> 
</ul> 
</body> 
</html> 
+0

ohh,和** css **'.toggleMe {display:none;}' – rlemon