php循环中的javascript

时间:2011-12-10 16:54:37

标签: php javascript loops

是否可以在php循环中运行javascript代码? 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 个答案:

答案 0 :(得分: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解释/执行/范围有特殊的规则,如果没有示例,它们的传达并不是非常简单。

答案 1 :(得分:-1)

是的,你可以:

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

在每个容器中添加php标签非常困难。