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 17: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 17:14

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

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

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

DenQ 31.01.2011 17:18

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

PeaceCoder 31.01.2011 17:25

Цитата:

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

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

Skipp 31.01.2011 17:48

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

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

DenQ 31.01.2011 18:02

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

micscr 02.02.2011 09:05

Цитата:

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

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

DenQ 02.02.2011 14:21

Цитата:

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

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

Skipp 02.02.2011 16:28

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

micscr 02.02.2011 16:42

Цитата:

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

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

x-yuri 02.02.2011 19:59

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

DenQ 02.02.2011 20:04

Цитата:

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

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

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

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

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

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

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

x-yuri 02.02.2011 20: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 09:28

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

DenQ 03.02.2011 11:24

Цитата:

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

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

milov 17.12.2013 05:11

Цитата:

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

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

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

Skipp 17.12.2013 09:15

Цитата:

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

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


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