Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Область видимости функции (https://javascript.ru/forum/jquery/14790-oblast-vidimosti-funkcii.html)

DenQ 31.01.2011 16:03

Область видимости функции
 
Привет всем! :)
В index.php подключается отдельный js файл, namefile.js, в котором имеем простую функцию:
$(document).ready(function() {
  function f(){
     alert('123');
  }
});

В index.php есть такой js код:
$(document).ready(function() {
  f();
});


Подскажите, как сделать, так чтобы функция f из namefile.js, вызвалась без ошибок в index.js?
Буду очень признателен, за помощь :)

PeaceCoder 31.01.2011 16:14

$(document).ready(function() {
 f = function(){
     alert('123');
  }
});

НО! f станет глобальной. Что может повлечь за собой проблемы в других местах разных функий.

Во вторых. Зачем вам использовать в индексе функцию которая подключается им же?

DenQ 31.01.2011 16:18

PeaceCoder, я специально существенно упросил код. Я бы конечно мог сделать функцию в index.php, но если я буду так делать, то это будет просто бардак. Мну нужно вызывать отдельные функции из разных подключаемых файлов, аккуратненько разложенных по всему проекту.
А как бы вы поступили?

PeaceCoder 31.01.2011 16:25

Цитата:

Сообщение от DenQ
А как бы вы поступили?

Ну так как и поступаю сейчас. стати такая проблема сейчас во всех современных цмс. Подключая модуль - он гадит в глобал.
Выделите какуюто переменную например INCS. Она единственная будет глобальной. А в подключаемых файлах присоединяйте все функции/данные к ней. При этом у Вас будет доступ к ним, а они в свою очередь не будут гадить в глобал. Все красиво и аккуратно

Skipp 31.01.2011 16:48

для этого в файле namefile.js уберите обработчик события
$(document).ready(function() {
  function f(){
     alert('123');
  }
});

и сделайте просто
function f(){
     alert('123');
  }

DenQ 31.01.2011 17:02

Skipp, я не просто так беру функции в "обертку" jquery.

micscr 02.02.2011 08:05

Цитата:

Сообщение от DenQ (Сообщение 90581)
Skipp, я не просто так беру функции в "обертку" jquery.

а зачем? Она тогда и будет видима внутри этой обертки. Варианты решения - выше

DenQ 02.02.2011 13:21

Цитата:

Сообщение от micscr
а зачем?

Что бы использовать функционал jQuery. Повторюсь, я специально существенно упростил код.

Skipp 02.02.2011 15:28

какой ещё функционал???
у вас функция вызывается до её создания, что тут упрощаете вы?

micscr 02.02.2011 15:42

Цитата:

Сообщение от DenQ (Сообщение 90803)
Что бы использовать функционал jQuery. Повторюсь, я специально существенно упростил код.

в смысле не приводишь всего, чтоб мы поняли? Выкладывай, мы не пугливые. :)

x-yuri 02.02.2011 18:59

достаточно просто рассказать, что за функция в namefile.js: 1) что она делает; 2) что она делает в document.ready. Можно даже несколько примеров функций привести. Но, скорее всего, проще будет привести код

DenQ 02.02.2011 19:04

Цитата:

Сообщение от Skipp
акой ещё функционал???

Ну попробуйте создать средствами jQuery какой нибудь элемент в DOMe, вне
$(document).ready(function() {
})

А я посмотрю, может чего нового узнаю...
Цитата:

Сообщение от Skipp
у вас функция вызывается до её создания?

С чего вы это взяли?
Цитата:

Сообщение от micscr
в смысле не приводишь всего, чтоб мы поняли? Выкладывай, мы не пугливые.

А зачем? Я просто привел, с позволения сказать "шаблон" логики действия... Не буду же я сюда постить многого файловый проект :)
Да и в любом случае с проблемой я уже разобрался:) Так что спасибо.

x-yuri 02.02.2011 19:21

Цитата:

Сообщение от DenQ
Ну попробуйте создать средствами jQuery какой нибудь элемент в DOMe, вне
$(document).ready(function() {})
А я посмотрю, может чего нового узнаю...

похоже узнаешь
<!DOCTYPE HTML>
<html>
  <head>   
    <style type="text/css">
      body {
        font-family: "Palatino Linotype", Palatino, Palladio, "URW Palladio L", "Book Antiqua", Baskerville, "Bookman Old Style", "Bitstream Charter", "Nimbus Roman No9 L", Garamond, "Apple Garamond", "ITC Garamond Narrow", "New Century Schoolbook", "Century Schoolbook", "Century Schoolbook L", Georgia, serif;
      }
      a {
        color: #016;
        text-decoration: none;
      }
      a:hover {
        text-decoration: underline;
      }
    </style>
  </head>
  <body>

    <p>я - содержимое странички

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
    <script type="text/javascript">
      $('<a href="#">я - сцылко</a>').appendTo(document.body);
    </script>

  </body>
</html>


<!DOCTYPE HTML>
<html>
  <head>   
    <style type="text/css">
      body {
        font-family: "Palatino Linotype", Palatino, Palladio, "URW Palladio L", "Book Antiqua", Baskerville, "Bookman Old Style", "Bitstream Charter", "Nimbus Roman No9 L", Garamond, "Apple Garamond", "ITC Garamond Narrow", "New Century Schoolbook", "Century Schoolbook", "Century Schoolbook L", Georgia, serif;
      }
      a {
        color: #016;
        text-decoration: none;
      }
      a:hover {
        text-decoration: underline;
      }
    </style>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
    <script type="text/javascript">
      function f(){
        $('<a href="#">я - сцылко</a>').appendTo(document.body);
      }
      $(function(){
        f();
      });
    </script>
  </head>
  <body>

    <p>я - содержимое странички

  </body>
</html>


Цитата:

Сообщение от DenQ
Да и в любом случае с проблемой я уже разобрался

все так думают, но не все правы ;)

Skipp 03.02.2011 08:28

DenQ,
Перед тем как использовать jQuery узнайте что такое js
а особенно события(onload к примеру) и возможно поймёте, что вы делаете не так.

DenQ 03.02.2011 10:24

Цитата:

Сообщение от Skipp
Перед тем как использовать jQuery узнайте что такое js
а особенно события(onload к примеру) и возможно поймёте, что вы делаете не так.

Перед тем как приходить на форум и злобно отвечать людям, научить элементарной вежливости, хотя бы.

milov 17.12.2013 03:11

Цитата:

Сообщение от PeaceCoder (Сообщение 90575)
$(document).ready(function() {
 f = function(){
     alert('123');
  }
});

НО! f станет глобальной.

ТЫ ПОМОГ СПАСИБО!!!

Skipp 17.12.2013 07:15

Цитата:

Сообщение от DenQ
Перед тем как приходить на форум и злобно отвечать людям, научить элементарной вежливости, хотя бы.

Хмм.. интересно в каком месте я был не вежлив? В том что укорил вас тем, что вы не знаете основ и отправил вас изучать их?


Часовой пояс GMT +3, время: 05:16.