如何在$(document).ready中调用一个函数

41

我正在试图调试使用 jQuery 的 Web 应用程序。

在 Firebug 中,我正在调用 $(document).ready 中的函数。

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

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

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

在firebug控制台中,我输入 validate() ,它说这不是一个函数。

如果我输入 val() ,它可以正常工作。

我该如何从控制台调用validate函数?


2
为什么不把你的验证函数放在document.ready函数之外呢?问题在于当调用该函数时,它的作用域已经失效了。 - bipen
这是因为validate是一个闭包函数,它在作为回调函数传递给ready的匿名函数内部。 - Arun P Johny
4个回答

77

你不应该像那样调用函数,只需定义函数。

正确的方法是在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,所以我正在学习中,谢谢 :) - IEnumerable

12

您的validate函数是局部函数,它属于您传递给jQuery ready处理程序的函数。

如果您执行以下操作:

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

你将能够从控制台访问。但是除了调试之外,污染全局范围并不是一个好的实践。


2

好的,你需要在document ready内使用这个函数吗?其实只有在括号(作用域)内部才能使用该函数。把它移出来或者放在document.ready内部即可。


0

你的代码中有两个错误。

  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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接