【问题标题】:How to call a function inside $(document).ready如何在 $(document).ready 中调用函数
【发布时间】:2017-08-03 11:57:56
【问题描述】:

我正在尝试调试使用 jQuery. 的网络应用程序

在 $(document).ready.. 内的 firebug im 调用函数中。

 function val() { console.log('validated outside doc.ready'); }
 $(document).ready(function()
 {

    console.log('document ready...');

    function validate() { console.log('validated!'); }
 }

在萤火虫控制台我输入validate(),它说它不是一个函数

如果我输入 val() 就可以了。

如何从控制台调用验证?

【问题讨论】:

  • 你为什么不把你的验证函数放在 document.ready 函数之外。问题是你的函数在被调用时超出了范围。
  • 这是因为validate是匿名函数中的一个闭包函数,作为回调传递给ready

标签: jquery debugging firebug


【解决方案1】:

你不是在调用这样的函数,你只是定义函数。

正确的做法是在document.ready外面定义函数,在里面调用:

// We define the function
function validate(){
  console.log('validated!');
}

$(document).ready(function(){
  // we call the function
  validate();
});

另一种选择是自行调用这样的函数:

$(document).ready(function(){
   // we define and invoke a function
   (function(){
     console.log('validated!');
   })();
});

【讨论】:

  • 是的,我喜欢这种方式,非常干净,非常感谢。过去几个月我才认真使用 jQuery,所以我学习了很多欢呼:)
【解决方案2】:

您的 validate 函数是您传递给 jQuery ready 处理程序的函数的本地函数。

如果你这样做:

window.validate = function(){ /*....*/ };

您将能够从控制台访问。但是除非只是为了调试,否则污染全局范围并不是一个好习惯。

【讨论】:

    【解决方案3】:

    好吧,您有什么理由需要在文档中准备好该功能吗? 只有在那些括号(范围)内,该功能才会存在。把它移出来,或者全部只在 document.ready 里面

    【讨论】:

      【解决方案4】:

      您的代码中有 2 个错误。

      1. 格式为右括号
      2. 您没有调用该函数。需要调用该函数才能打印。
      <script>
        function val() { console.log('validated outside doc.ready'); }
        $(document).ready(function() {
          console.log('document ready...');
          validate();
          function validate() { val();  console.log('validated!'); }
        });
      </script>
      

      【讨论】:

        猜你喜欢
        • 2011-01-23
        • 1970-01-01
        • 2014-01-13
        • 1970-01-01
        • 2018-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多