Вызов функции на другой странице - PullRequest
3 голосов
/ 24 октября 2011

Я сделал много функций. Я поместил эти функции в файл script.js. Но все эти функции загружаются на каждой странице.

Я сделал такие функции:

$(function () {
}):

Но как я могу гарантировать, что функции загружаются не на каждой странице? Что я могу вызвать только ту функцию, которая мне нужна?

Ответы [ 4 ]

2 голосов
/ 24 октября 2011

У Пола Айриша есть хороший способ справиться с этой проблемой.См. Его статью:

Вы можете создать структуру для каждой из своих страниц, например:

var siteNameSpace  = {
   homepage : {
      onload : function(){
         // do this stuff.
      }
   },
   contact : {
      onload : function(){
         // onload stuff for contact us page
      }
    }
};

И код соответствующей страницы будет срабатывать только с:

$(document).ready( siteNameSpace[ document.body.id ].onload );

Для этого вам необходимо присвоить тег id для body каждой из ваших страниц:

<body id="home">
<body id="contactUs">
and so on
1 голос
/ 24 октября 2011

Один из способов состоит в том, чтобы разбить файлы .js на модули и включить только файлы .js, которые имеют отношение к странице.

В jQuery, возможно, более распространено использование подходанапример:

$(function () {

    if (someCheck) {
        // do something
    }

    if (someCheck) {
        // do something else
    }

});

someChecks обычно проверяют наличие определенного элемента (if ($(someSelector).length)).

Однако, чтобы конкретно ответить на ваш вопрос, вы бы далифункционирует имя и затем вызывает их, поэтому вместо того, чтобы иметь;

$(function () {
  // do foo
})

У вас будет

function someName() {
  // do foo
}

, и тогда вы сможете вызывать функцию как someName(), но, очевидно, вынеобходимо поместить вызов функции в такое место, которым вы могли бы управлять отдельно для каждой страницы (например, в <head> страницы или путем включения различных файлов .js, как объяснено ранее в ответе.

0 голосов
/ 24 октября 2011

Я не могу понять, что именно вы просите, но, возможно, я смогу кое-что прояснить для вас.
Не имеет значения, если переменные (функции) объявлены в разных файлах, что имеет значениенаходится в том, что scope они объявлены.
Другими словами, даже если функции находятся в разных файлах, если они объявлены глобальными (не внутри замыкания / функции / объекта), они видныи может вызываться из любого места.
Ex глобальных функций:

function foo() {/*...*/}
var bar = function(){/*...*/}
window.func = function(){/*...*/}

Если вы хотите " скрыть " функций, делая их недоступными из другой области, вам следуетиспользуйте замыкание.
Ex функций, определенных в замыкании:

function initialise {
   var foo = function(){}
   function bar(){}
   alert(typeof foo); // function
   alert(typeof bar); // function
   // foo & bar are visiblehere
}
alert(typeof foo); // undefined
alert(typeof bar); // undefined
// foo & bar are undefined here

Более того, если вы хотите выполнить их только один раз и полностью сделать их недоступными, вы можете заключить их в самовыполняющуюся функцию:

(function(){
    function bar(){}
    alert(typeof bar);// function
    // bar is visible here
})();
// bar is undefined here

Я не знаю, ответил ли я на ваш вопрос, но надеюсь, что это поможет.

0 голосов
/ 24 октября 2011

Вы можете создать несколько наборов внешних файлов javascript и разместить их на странице там, где они необходимы.

В качестве альтернативы вы можете загрузить скрипт, используя jQuery getScript метод ;

$.getScript('url of ext js', function(data, textStatus) { 

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