Не могу вызвать функцию JavaScript - проблема области видимости?

13 нояб. 2012 г., 20:51:26
Просмотры: 14.6K
Голосов: 0

Получаю ошибку "метод не определен" при попытке вызвать функцию из site.js, которая загружена с помощью wp_enqueue_script.

Предполагаю, что проблема в области видимости из-за оберток jQuery ready. Как это обойти?

site.js (загружается в head)

jQuery(document).ready(function($) {
  $(window).load(function() { // ждем полной загрузки страницы
    doSomething(); // получаем face palm
  });
});

my-script.js (загружается в подвале)

jQuery(document).ready(function($) {

  function doSomething() {
    alert("Пора на перерыв!");
  }
});

functions.php

wp_register_script( 'my-script', get_template_directory_uri().'/js/my-script.js', array( 'jquery' ), '', true );
wp_enqueue_script( 'my-script' );
// Передаем PHP переменные
wp_localize_script( 'my-script', 'my_script', localize_post_vars() );
0
Все ответы на вопрос 1
2

Вам необходимо поместить вашу функцию doSomething в правильное пространство имен (namespace), или хотя бы в какое-либо пространство имен. Самый простой способ - разместить ее в пространстве имен window:

jQuery(document).ready(function($) {
    window.doSomething = function() {
        alert("Время для кофе-брейка!");
    };
});
13 нояб. 2012 г. 21:29:28
Комментарии

Спасибо! Если я опущу window., код с присваиванием функции тоже работает. В этом случае по умолчанию используется пространство имен window?

manafire manafire
13 нояб. 2012 г. 21:33:55

Да, чтобы сделать переменную локальной, нужно просто добавить var перед объявлением: var doSomething = function() { ... };.

totels totels
13 нояб. 2012 г. 22:00:56