2011-12-10 46 views
-1

是否有可能在php循環中運行javascript代碼? JavaScript的工作完美的問題是,它目前不能執行多次。在php循環中的javascript

while(...) { 

$l=$l+1; 
$linha="#x".$l; 
$linha2="x".$l; 
    ?> 

<script type="text/javascript"> 
$(document).ready(function() { 

var mensagem = "<?= $mensagem ?>"; 
var id= "<?= $linha ?>"; 

var nextMsgOptions = { 
    msg: mensagem, 
    side: "bottomMiddle",  
    CSSClass: "nextMsg-LightTheme",} 

$(id).click(function(){ 
    $(id).nextMsg(nextMsgOptions); 
}); 


}); 
</script> 

} 

有什麼想法嗎? ;)

+2

首先,您不能在PHP循環中「運行」JavaScript代碼,因爲PHP是服務器端,JavaScript是客戶端。你可以*從PHP生成* JS - 這是你的意思嗎?其次,請展示你期望的結果,以及你得到的結果。另外,請告訴我們'while'循環的繼續條件是在PHP中。 – DaveRandom

+0

我只想讓表中的每個用戶在點擊時顯示附加信息 – coiso

+0

好的,請向我們展示表格,您要如何處理它,以及您目前獲得的信息。請使用目前正在生成的HTML編輯問題,以及您想要的內容。 – DaveRandom

回答

3

是的,你可以在PHP循環中輸出javascript,當頁面加載時由瀏覽器執行。

這裏的問題是,你有大量的變量碰撞。您需要封裝該腳本標記的每個輸出以防止發生。這裏有一個建議:

<script type="text/javascript"> 
<?php while(...): $l++; $linha = "#x" . $l; $linha2 = "x" . $l; ?> 
    (function($) 
    { 
     var mensagem = "<?= $mensagem; ?>", 
     id = "<?= $linha; ?>", 
     nextMsgOptions = { 
     msg: mensagem, 
      side: "bottomMiddle", 
      CSSClass: "nextMsg-LightTheme" 
     }; 

     $(document).ready(function() { 
      $(id).click(function(){ 
       $(id).nextMsg(nextMsgOptions); 
      }); 
     }); 
    })(jQuery); 
<? endwhile; ?> 
</script> 

這樣可以使每一個$linha$mensagem可變範圍的相互遠離的循環的每個迭代。我認爲/正在發生的事情是在您的舊代碼中,您將$linha設置爲某個變量,然後輸出id = <?= $linha; ?>,但執行循環的次數很多。當爲每個輸出執行$(document).ready()時,$linha已被解釋爲循環輸出的最後一個值。這導致document.ready將一個事件附加N次(N = while循環的迭代次數)到同一DOM元素(無論您的while循環的最後一次迭代輸出爲$linha)。通過上面的代碼片段,每個id$linha變量的作用範圍都是相互獨立的,因此您不必擔心碰撞。

我意識到這種解釋有點複雜,可能很難說服;但是JavaScript解釋/執行/範圍界定有特殊的規則,沒有示例就不是非常簡單的傳達。

+0

「(jQuery)」到底做了什麼? – coiso

+0

並做了PHP,而必須在JavaScript內? – coiso

+0

作品! (我只是沒有把這段時間放在JavaScript裏面) – coiso

-1

是,您可以:

<? while(...) { ?> 
<script type="javascript"> 
// Here is you're js code 
</script> 
<? } ?> 

它是很難在每個容器PHP標籤添加。