访问jquery.ready()之外的变量

时间:2013-03-18 10:16:06

标签: javascript jquery scope

这变得非常令人沮丧所以我希望有人能够提供帮助。我不是一个伟大的JavaScript或JQuery开发人员(更多的后端人),但我已经搜索了高和低的解决方案,似乎没有任何帮助。这是我的问题的简化版......

<script language="JavaScript" type="text/javascript">
fooey = 'baaa';

jQuery(document).ready(function($) {

fooey = 'New value';     

});

alert("value: " + fooey);  // I need this to be 'New value'

</script>

如何更改JQuery块中的fooey变量,然后从JQuery块外部访问此新值。所以我期待警报弹出窗口显示“新值”而不是“baaa”。

5 个答案:

答案 0 :(得分:3)

您的代码有效,但它按以下顺序运行:

  1. fooey ='baaa';

  2. 设置jQuery(文档).ready

  3. alert(“value:”+ fooey);

  4. 运行jQuery(document).ready

  5. 这种情况正在发生,因为JavaScript在document准备好之前运行(并且jQuery事件触发)。因此,如果您在fooey准备好之前使用document,则应将其设置为'New value'。如果您需要在 DOM准备就绪时使用它,请在$(document).ready函数的末尾使用它。

    <强>解释

    加载网页后,会运行页面中的JavaScript。这将通过代码(设置和提醒fooey的值),设置任何事件,例如.onclickwindow.onresize$(document).ready(),这些事件稍后会在特定时间调用事件发生。对于$(document).ready(),当DOM(文档对象模型)准备好进行处理时就会发生这种情况。

    来自jQuery API - ready()

      

    在完全接收到所有资产(如图像)之前,不会触发此事件。

答案 1 :(得分:1)

在就绪功能中定义警报,原因是在document.ready功能之前执行警报。

<script language="JavaScript" type="text/javascript">
    fooey = 'baaa';
    jQuery(document).ready(function($) {
        fooey = 'New value';     
        alert("value: " + fooey);  // I need this to be 'New value'     
    });
</script>

答案 2 :(得分:1)

javascript

var foo;
        $(function() {   
           // this is your jquery.ready() function. I have write it in another way
           foo = 'val1'
           alert(foo);
        });

      function fun(){
        foo = 'val2';
        alert(foo);
      }
      function fun2(){
        alert(foo);
      }

HTML代码

   <input type="button" id="b1" value="b1" onclick="fun()" >
   <input type="button" id="b2" value="b2" onclick="fun2()">

现在,此处foo变为a global variablefoopage loading的值为val1

如果您点击按钮b1,则其值变为val2。您可以点击按钮b2来检查此值。

答案 3 :(得分:0)

ready子句的重点是等到文档完全准备好后再做任何事情。通过在该事件之外添加代码,它将在就绪事件之前加载(可能)。

答案 4 :(得分:-1)

<script language="JavaScript" type="text/javascript">

// executed when browser interprets this line
fooey = 'baaa';  // (1st to be executed)

jQuery(document).ready(function($) {

// executed after few seconds , when DOM is ready.   (3rd one to be executed)
 fooey = 'New value';     

});


// executed when browser interprets this line (2nd one to be executed)
alert("value: " + fooey);  

</script>

最后,fooey值为New value ,但在您发出警报时则不会

你可以等到DOM准备就绪。

<script language="JavaScript" type="text/javascript">

fooey = 'baaa';   

jQuery(document).ready(function($) {

 fooey = 'New value';     

});

var interval = setInterval(function () {
   if ( jQuery.isReady ) {
      clearInterval(interval);
      alert("value: " + fooey);

   }   
},10)
</script>