Область моей функции jQuery? - PullRequest
0 голосов
/ 21 ноября 2011

У меня есть файл с именем function.js, в котором есть все мои jQuery для моего приложения, который выглядит следующим образом:

$(document).ready(function(){

    insert_initial(); //first time to the page, insert into cart and set the subtotal originally

    function update_gallery(product_id){
        ...
    }

    function update_prices(product_selector){
        ...
        ...
    }

    function insert_initial(){
        ...
    }

    $('.trigger').click(function(){
        $('.stations').find(".drop-down").slideToggle();
        return false;
    });

    ...
    ...

В верхней части файла у меня есть вызов функции insert_initial();, который запускаетсяначальная загрузка .... и это прекрасно работает .. Моя проблема в том, что мне теперь нужно включить этот файл js на моих страницах php сказать 1.php и 2.php и 3.php и 1.php является единственным, которыйнужен insert_initial(); .... так что я думал о лучшем способе сделать это.Я предполагал извлечь вызов функции из файла функций и поместить его в отдельный файл

<script src="/someting/js/functions.js" type="text/javascript"></script>
<script src="/someting/js/functions_insert.js" type="text/javascript"></script> 

, а в моем файле functions_insert.js у меня будет только

$(document).ready(function(){
insert_initial(); //first time to the page, insert into cart and set the subtotal originally
});

, но этотоже не сработало ... есть идеи как это исправить

Ответы [ 4 ]

1 голос
/ 21 ноября 2011

Это проверяет, чтобы убедиться, что местоположение текущей страницы включает «1.php» перед вызовом insert_initial():

if(window.location.href.indexOf('1.php') != -1)
    insert_initial();
1 голос
/ 21 ноября 2011

Я бы порекомендовал разделить ваши определения и исполнения в этом случае. Вам не нужно определять свои функции внутри события JQuery DOM ready. Но это также хорошо для пространства имен, как уже упоминалось. Общая парадигма, которой я придерживаюсь, выглядит так:

functions.js

(function($, window, undefined) {
    function update_gallery(product_id){
        ...
    }

    function update_prices(product_selector){
        ...
        ...
    }

    function insert_initial(){
        ...
    }

    window.MyApp = {
        update_gallery: update_gallery,
        update_prices: update_prices,
        insert_initial: insert_initial
    };
})(jQuery, window); 

1.php

<script src="functions.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
    MyApp.insert_initial();
});
</script>

Теперь вы можете включать свои определения по мере необходимости и вызывать их по мере необходимости.

1 голос
/ 21 ноября 2011

Попробуйте использовать пространство имен для ваших функций и присоединить их к хорошему глобальному объекту.

window.MyApp = {};

MyApp.insert_initial = function(){

};

Затем вы сможете получить к нему доступ из любого места, если оно будет включено ранее на странице.:

Если это не сработает, у вас есть ошибка в другом месте вашего кода - возможно, порядок загрузки?Любой метод, который вы описали для вызова функции, подходит, просто убедитесь, что он определен при вызове.

0 голосов
/ 21 ноября 2011

Ваши функции, определенные в functions.js, видны только в области действия этой функции готовности документа.Простой случай, когда это не работает:

(function() {
    function square(x) {
        return x*x;
    }
})();

alert(square(2)); //Fails, since square is not in scope

Самый простой способ исправить это - объявить ваши функции в глобальном пространстве имен:

function square(x) {
    return x*x;
};

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