jquery - $(document).ready函数内的函数

时间:2011-07-21 18:30:50

标签: jquery document document-ready

中创建函数是否正确
$(document).ready(function() {
像这样:

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

     }
 });

在{dom准备就绪并且.ready()内的事件被触发之前,ready()内部的函数不必调用。

只是澄清一点 - 这是代码,它将说明问题:

$(function() {
    var ind = 0;

    // some event is executed and changes the value of the ind

    // another event which affects the ind variable

    // and another one - after this event we call our function


    // there's another event - and we call our function again

我需要调用的函数需要ind变量的更新值 - 我想我可以将其作为参数传递,但是有更好的方法吗?

另外 - 另一个重要的事情是,有问题的function()也可以更改ind变量的值 - 例如递增它(ind++)。

8 个答案:

答案 0 :(得分:42)

是的,你可以这样做,这只是一个范围问题;如果您只需要从callMe()中访问$(document).ready(function() { }),那么可以将函数放在那里,并提供一些架构优势,因为您无法访问该上下文之外的函数。如果您需要在文档就绪之外使用callMe()函数,则需要在该上下文之外定义callMe()函数。

function callMe() {
  // Do Something
}

$(document).ready(function() {
  callMe();
});

<强>更新

根据您的澄清,您有两种选择:

1)在ready()之外的DECLARE变量,但是然后在ready()

中定义变量
var someVariable;
function callMe() {
  someVariable++;
  alert(someVariable);
}

$(document).ready(function() {
  someVariable = 3;
  callMe(); // Should display '4'
});

2)在准备好之内,使用window.yourVariable = 'whatever';

定义变量

答案 1 :(得分:4)

这也可以。

$(document).ready(function() {
      callMe = function() {
            alert('hello');
      }
});

callMe();

如果您使用

 var callMe = function () { ... }

它可能无效,您可能会收到错误“函数未定义”

答案 2 :(得分:2)

$(document).ready内创建函数时,可以保证在文档加载之前不会调用它。当然,它只能从事件处理程序本身调用(稍后在事件处理程序中的某个地方)。

换句话说,你要做的事情是有效的(尽管不一定是可取的 - 你必须透露更多关于你想要完成的事情)。

答案 3 :(得分:2)

你可以这样做:

$(document).ready(function(){

    var callMe = function(){
       //enter code here
    }

    $(".my-class").on("click", function(){
       callMe();
    });

});

因此,您不需要将函数放在文档之外,代码就会变得分组并且更有条理。 ;)

答案 4 :(得分:0)

直接调用函数可能更好:

$(document).ready(myFunction);

function myFunction() {

   // Your code here

}

答案 5 :(得分:0)

这绝对是合法的。问题是你为什么要这样做?可能将函数的范围绑定到ready的范围,而不是将其全局绑定到window对象。但那是你真正想要的吗?我建议看一下javascript中的函数闭包以及它如何处理作用域。帮助澄清它的必要性......

答案 6 :(得分:0)

通过将标记移动到html文件的底部,查看是否可以消除使用document.ready的需要。这应该会使事情变得更简单。否则,将该函数声明在document.ready范围之外,并在document.ready函数范围内调用它。

答案 7 :(得分:0)

您可以使用以下内容:

$(document).ready(function () {
    printReport = function(rowIndex) {
        // Your code here
    }
});

您可以在任何事件中调用此函数。