案例,当“document.ready”阻碍时

时间:2012-09-03 12:57:56

标签: php javascript jquery

我有php文件,在这个文件中我有这个代码:

    <script language="JavaScript" type="text/javascript" src="jquery.js"></script>
    <script language="JavaScript">
        $(document).ready( function () {
            var myvar = <?php   echo json_encode($myvar);   ?> ;
        });
    </script>
    <script language="JavaScript" type="text/javascript" src="costum.js">  </script>

在costum.js文件中我有代码:

$(document).ready( function () {
    alert(myvar );
});

这不起作用,错误consol返回“myvar is undefined”

如果在php文件中我写这个(也就是说,没有“document.ready”)

 <script language="JavaScript">
     var myvar = <?php   echo json_encode($myvar);   ?> ;
 </script>

在costum.js文件中,代码alredy正在运行。请告诉我为什么会这样?

3 个答案:

答案 0 :(得分:5)

尝试

<script>
    var myvar;
    $(document).ready( function () {
        myvar = <?php   echo json_encode($myvar);   ?> ;
    });
</script>

您的变量必须声明为全局(换句话说,在外部作用域中)才能从document.ready个函数中查看。

作为旁注language属性不是必需的。即使type也没有必要(如果您使用的是html5 doctype)

答案 1 :(得分:1)

您的myvar位于就绪功能的本地范围内。将var声明移到外面,使其成为全局声明,并可用于其他脚本。

但是,正如您刚刚分配给变量一样,无论如何都不需要等待DOMready。只需使用

<script type="text/javascript">
    var myvar = <?php echo json_encode($myvar); ?>;
</script>

BTW,language属性is deprecated

答案 2 :(得分:1)

函数内部的局部变量仅在函数范围内可见。

在全局范围内声明变量时,它就是全局变量。

您可以通过以下方式将其公开到全球范围:

$(document).ready( function () {
      var myvar = <?php   echo json_encode($myvar);   ?>;
      window['myvar'] = myvar;
 });