【问题标题】:Case, when "document.ready" obstruct案例,当“document.ready”阻碍时
【发布时间】:2012-08-28 05:17:54
【问题描述】:

我有 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 );
});

这不起作用,错误控制台返回“myvar is undefined”

如果我在 php 文件中写这个(即没有“document.ready”)

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

在 costum.js 文件中,代码已经可以工作了。请说说为什么会这样?

【问题讨论】:

    标签: php javascript jquery


    【解决方案1】:

    试试

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

    您的变量必须声明为全局变量(或者换句话说,在外部范围内)才能从两个document.ready 函数中查看。

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

    【讨论】:

    • 感谢、理解并感谢“语言属性”方面的信息。 Bergi 先生和 xdazz 先生,你们也谢谢您。
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      您的myvar 在就绪函数的本地范围内。将 var 声明移到外部,使其成为全局变量并可供其他脚本使用。

      但是,由于您只是分配给一个变量,因此您无论如何都不需要等待 DOMready。只需使用

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

      顺便说一句,language 属性 is deprecated

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-30
        • 1970-01-01
        • 2016-04-05
        • 1970-01-01
        • 2014-08-06
        • 2018-09-18
        • 1970-01-01
        相关资源
        最近更新 更多