jQuery -$(document).ready函数中的函数

hfsqlsce  于 2023-01-20  发布在  jQuery
关注(0)|答案(9)|浏览(377)

在内部创建函数是否正确

$(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++)。

of1yzvn4

of1yzvn41#

是的,您可以做到这一点,这只是scope的问题。
如果您只需要从$(document).ready(function() { })内部访问callMe(),那么将函数放在那里是很好的,并且提供了一些架构上的好处,因为您不能在上下文之外访问函数。
如果需要在document ready之外使用callMe()函数,则需要在该上下文之外定义callMe()函数。

function callMe() {
  // Do Something
}

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

更新

根据你的说明,你有两个选择:
1)在ready()外部声明变量,然后在ready()内部定义变量:

var someVariable;
function callMe() {
  someVariable++;
  alert(someVariable);
}

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

2)在ready()中,使用window.yourVariable = 'whatever';定义变量

mec1mxoz

mec1mxoz2#

这也行。

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

callMe();

如果您使用

var callMe = function () { ... }

它可能不起作用,您可能会收到错误"function is undefined"(函数未定义)

zkure5ic

zkure5ic3#

这样直接调用函数可能是一个更好的主意:

$(document).ready(myFunction);

function myFunction() {

   // Your code here

}
weylhg0b

weylhg0b4#

当你在$(document).ready中创建一个函数时,可以保证在文档加载之前它不会被调用,当然,它只能从事件处理程序本身调用(在事件处理程序的后面)。
换句话说,你试图做的事情是有效的(虽然不一定是可取的--你必须透露更多关于你试图完成的事情)。

ggazkfy8

ggazkfy85#

你可以这样做:

$(document).ready(function(){

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

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

});

所以,你不需要把函数放在文档之外,代码就成组了,更有组织了。)

oxosxuxt

oxosxuxt6#

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

fxnxkyjh

fxnxkyjh7#

看看是否可以通过将标记移到html文件的底部来消除使用document.ready的需要。这应该会使事情变得简单得多。否则,在document.ready的作用域之外声明函数,而只在document.ready函数作用域中调用它。

vddsk6oq

vddsk6oq8#

您可以像下面这样使用:

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

可以从任何事件调用此函数。

5n0oy7gb

5n0oy7gb9#

<input type="button" value="Click Me!" onclick="Demo();" />

<script>

    $(document).ready(function () {

        Demo = function () {
            alert("Hello World");
        };
    });

</script>

相关问题