jquery - функция внутри функции $ (document) .ready - PullRequest
27 голосов
/ 21 июля 2011

Правильно ли создавать функции внутри

$(document).ready(function() {

примерно так:

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

     }
 });

Функция внутри .ready() не должна вызываться до того, как dom будет готов исобытие внутри 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++).

Ответы [ 7 ]

45 голосов
/ 21 июля 2011

Да, вы можете сделать это, это просто вопрос области;если вам нужен только доступ к callMe() из $(document).ready(function() { }), тогда хорошо поместить функцию туда и предложить некоторые преимущества архитектуры, потому что вы не можете получить доступ к функции вне этого контекста.Если вам нужно использовать функцию callMe () вне готового документа, вам нужно определить функцию callMe () вне этого контекста.

function callMe() {
  // Do Something
}

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

UPDATE

Исходя из вашего пояснения, у вас есть два варианта:

1) ОБЪЯВЛЯТЬ переменную вне готового (), но затем определить переменную внутри готового ()

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

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

2) Внутри готовогоопределить переменные, используя window.yourVariable = 'whatever';

4 голосов
/ 01 сентября 2015

Это также будет работать.

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

callMe();

Если вы используете

 var callMe = function () { ... }

Может не работать, и вы можете получить сообщение об ошибке «функция не определена»

2 голосов
/ 30 апреля 2015

Вы можете сделать так:

$(document).ready(function(){

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

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

});

Таким образом, вам не нужно помещать функцию за пределы документа, и код становится сгруппированным и более организованным.;)

2 голосов
/ 21 июля 2011

Когда вы создаете функцию внутри $(document).ready, она гарантированно не будет вызвана до загрузки документа. Конечно, он может быть вызван только из самого обработчика событий (где-то позже в обработчике событий).

Другими словами, то, что вы пытаетесь сделать, является допустимым (хотя и не обязательно желательным - вам нужно больше узнать о том, чего вы пытаетесь достичь).

0 голосов
/ 29 марта 2017

Посмотрите, сможете ли вы устранить необходимость использования document.ready, переместив свой тег в конец HTML-файла.Это должно сделать вещи намного проще.В противном случае объявите функцию вне области действия document.ready и просто вызовите ее в области действия document.ready.

0 голосов
/ 21 июля 2011

Это определенно законно.Вопрос в том, почему вы хотите это сделать?Вероятно, чтобы привязать область действия функции к области готовности и не привязывать ее глобально к объекту окна.Но это то, что вы действительно хотите?Я предлагаю взглянуть на замыкания функций в javascript и на то, как они справляются с областью видимости.чтобы прояснить необходимость в этом ...

0 голосов
/ 21 июля 2011

Вероятно, лучше вызывать функцию напрямую следующим образом:

$(document).ready(myFunction);

function myFunction() {

   // Your code here

}
...