Jquery - функция внутри функции $(document).ready
Правильно ли создавать функции внутри
$(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 another event - and we call our function again
Функция, которую мне нужно вызвать, нуждается в обновленном значении переменной ind
, которую, я думаю, я могу передать как параметр, но есть ли лучший способ сделать это?
Кроме того, еще одна важная вещь заключается в том, что рассматриваемый function()
может также изменить значение переменной ind
- например, увеличивая ее (ind++
).
Ответы
Ответ 1
Да, вы можете это сделать, это просто вопрос объема; если вам нужно только получить доступ к callMe()
из $(document).ready(function() { })
, то это прекрасно, чтобы поместить туда функцию, и предлагает некоторые преимущества архитектуры, потому что вы не можете получить доступ к функции вне этого контекста. Если вам нужно использовать функцию callMe() вне документа, хотя вам нужно определить функцию callMe() вне этого контекста.
function callMe() {
// Do Something
}
$(document).ready(function() {
callMe();
});
UPDATE
На основе вашего разъяснения у вас есть два варианта:
1) Переменная DECLARE вне ready(), но затем определите переменную внутри ready()
var someVariable;
function callMe() {
someVariable++;
alert(someVariable);
}
$(document).ready(function() {
someVariable = 3;
callMe(); // Should display '4'
});
2) В пределах готовности определите переменные, используя window.yourVariable = 'whatever';
Ответ 2
Это также сработает.
$(document).ready(function() {
callMe = function() {
alert('hello');
}
});
callMe();
Если вы используете
var callMe = function () { ... }
Он может не работать, и вы можете получить сообщение об ошибке "функция undefined"
Ответ 3
Когда вы создаете функцию внутри $(document).ready
, она гарантирует, что она не будет вызываться до загрузки документа. Конечно, его можно вызывать только из самого обработчика события (где-то позже в обработчике событий).
Другими словами, то, что вы пытаетесь сделать, является допустимым (хотя и не обязательно желательным), вам нужно больше узнать о том, что вы пытаетесь выполнить).
Ответ 4
Вы можете сделать так:
$(document).ready(function(){
var callMe = function(){
//enter code here
}
$(".my-class").on("click", function(){
callMe();
});
});
Итак, вам не нужно ставить функцию вне документа, и код становится сгруппированным и более организованным.;)
Ответ 5
Вероятно, лучше назвать функцию прямо так:
$(document).ready(myFunction);
function myFunction() {
// Your code here
}
Ответ 6
Это определенно законно. Вопрос в том, почему вы хотите это сделать? Вероятно, привязать область действия к области готовности и не привязать ее глобально к объекту окна. Но это то, что вы действительно хотите? Я предлагаю взглянуть на закрытие функций в javascript и как он обрабатывает область видимости. чтобы помочь выяснить его необходимость...
Ответ 7
Посмотрите, можете ли вы устранить необходимость использования document.ready, перемещая тэг в нижнюю часть html файла. Это должно сделать вещи намного проще. В противном случае объявите функцию вне области document.ready и просто вызовите ее в области действия document.ready.