Почему я не могу определить функции в документе jQuery document.ready ()? - PullRequest
62 голосов
/ 29 июня 2009

Функции появляются как неопределенные, если я помещаю их в функцию document.ready ():

$(document).ready(function(){
  function foo()
  {
    alert('Bar');
  }
});

foo(); // Undefined

Почему это происходит? Я уверен, что мне просто нужно некоторое простое понимание:)

Ответы [ 6 ]

65 голосов
/ 29 июня 2009

Не уверен, почему определение функции с помощью ready() важно для вас, но вы можете заставить ее работать, объявив foo в начале:

<html><head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js"></script>
<script>
var foo;                           // Here's the difference
$(document).ready(function(){
  foo = function ()
  {
    alert('Bar');
  }
});
</script></head><body>
<input type="button" onclick="foo()" value="Click me">
</body></html>

Очевидно, вы не можете вызвать foo() из встроенного скрипта сразу после ready(), потому что код ready() еще не запущен, но вы можете вызвать функцию позже.

Просто убедитесь, что ничто не может попытаться вызвать foo() до запуска кода ready() (или сделать первоначальное объявление foo() безвредной функцией).

24 голосов
/ 29 июня 2009

Вы можете, но они должны вызываться в области действия метода ready(), в противном случае они теряют область действия при выходе из метода ready().

Например, код ниже будет работать:

$(document).ready(function(){
  function foo()
  {
    alert('Bar');
  }

  foo(); // still in the scope of the ready method
});
7 голосов
/ 29 июня 2009

Они появятся как неопределенные, если вы поместите их в любую область, не принадлежащую им. Если вы действительно хотите использовать их вне области действия $ (document) .ready (...), вам нужно объявить их внешне. Такие как:

var foo;

$(document).ready(function(){
  foo = function()
  {
    alert('Bar');
  }
});

foo(); // works now because it is in scope

Надеюсь, это поможет.

4 голосов
/ 29 июня 2009

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

1 голос
/ 06 сентября 2014
<script>
    $(document).ready(function(){
      myfnc = function (param1, param2)
      {
        alert('Hello');
      }
      myfnc();
    });
</script>
<input type="button" onclick="myfnc('arg1', 'arg2')" value="Click me">
0 голосов
/ 07 сентября 2016

Просто еще одно дополнение:

При объявлении функций или переменных внутри функции $(document).ready() они недоступны при использовании связываний onclick() в документе.

Вы можете переместить ваши объявления за пределы $(document).ready(), или вы можете использовать $('#element').on('click', function() {}) в `$ (document) .ready ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...