Вы здесь

$().once is not function

0

Такая проблема:
Есть вебформа, которая выводится в colorboxnode (Детальное описание проблемы тут) к вебформе через form_alter подключается js файл, в котором есть behaviors, и чтобы повторно не навешивались на селекторы события используется .once. Так вот при клике по линку, который вызывает форму в colorbox, в консоле получаю ошибку $().once is not function после долгого копания до меня дошло, что мой модуль не видит JQuery.once, и если в своем модуле повторно, перед своим скриптом подрубить JQuery.once из ядра, то ошибки нет и форма работает нормально.

Почему не виден JQuery.once, который по умолчанию должен быть доступен со всех страниц. Почему его приходится подрубать повторно для работоспособности?

скрипт подрубаю по феншую:

        $path = drupal_get_path('module', 'name') . "/";
        $form['#attached']['js'][] = $path . 'js/script.js';
Версия Drupal: 
7.x
Категория: 
Form API
Связанные проекты: 
Webform
Вопрос задан 23.09.2015 - 15:12
Аватар пользователя im
im
32

Слишком мало инфы. Непонятно в какой функции ты это подключаешь.
Учись пользоваться средствами разработкой (F12) в браузере.
1) Отключи "Объединение файлов JavaScript" и Кеширование.
2) Посмотри в каком файле и на какой строке возникает ошибка.

Комментарий оставлен 24.09.2015 - 05:24

Слишком мало инфы. Непонятно в какой функции ты это подключаешь.

Сделал форму webform, сделал свой модуль, который подключает js и css именно к этой форме, form_alter'ом по form_id, сделал линк на форму, который юзает ColorboxNode, теперь странности: если мой модуль отключен, при запуске линка, на странице отличной от страницы с формой, форма не грузится, в консоле ошибка, что once не функция, ссылается на ошибку во втрутреннем js файле drupal, который делает проверку куки, и в котором используется метод once, если мой модуль подключен, то ссылается и на мой js файл где используется once и на дрюпаловский. ОТсюда вывод, при вызове формы в окне colorbox'a средствами colorboxnode, вызванная форма отрезана от подключенных системных скриптов.

Учись пользоваться средствами разработкой (F12) в браузере.

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

кусок куда ссылается:

Drupal.behaviors.fillUserInfoFromCookie.attach  @   VM3086:65
(anonymous function)    @   drupal.js?nv63gp:76
b.extend.each   @   jquery.js?v=1.4.4:33
Drupal.attachBehaviors  @   drupal.js?nv63gp:74
Drupal.ajax.commands.insert @   ajax.js?v=7.39:570
Drupal.ajax.success @   ajax.js?v=7.39:428
Drupal.ajax.ajax.options.success    @   ajax.js?v=7.39:189
c.extend.handleSuccess  @   jquery.js?v=1.4.4:143
c.extend.ajax.w.onreadystatechange  @   jquery.js?v=1.4.4:142

и сам кусок:

/**
 * Prepopulate form fields with information from the visitor cookie.
 */
Drupal.behaviors.fillUserInfoFromCookie = {
  attach: function (context, settings) {
    $('form.user-info-from-cookie').once('user-info-from-cookie', function () {
      var formContext = this;
      $.each(['name', 'mail', 'homepage'], function () {
        var $element = $('[name=' + this + ']', formContext);
        var cookie = $.cookie('Drupal.visitor.' + this);
        if ($element.length && cookie) {
          $element.val(cookie);
        }
      });
    });
  }
};

})(jQuery);
Комментарий оставлен 24.09.2015 - 09:07

А colorbox не в iframe, часом, открывается?

Комментарий оставлен 24.09.2015 - 15:36

не-а, пока не нашел решение, подгружаю форму в скрытый блок. Тогда открывается все ок.

Комментарий оставлен 24.09.2015 - 20:10

Ошибка возникает для авторизованных пользователей, анонимов?

Комментарий оставлен 25.09.2015 - 17:35

Ответы

0

у меня работает как описывал ксандеадкс Webform + Ajax -- правда валидацию я не делал.
отправляется нормально, в окне колорбокса подгужается сообщение о завершении.

Почему не виден JQuery.once, который по умолчанию должен быть доступен со всех страниц.

а в хтмл-коде правильный порядок подключения?

Ответ дан 23.09.2015 - 15:16

а в хтмл-коде правильный порядок подключения?

Если вы имеете ввиду вывод переменной $script в шаблоне html.tpl.php то там все по дефолту.

Нигде порядок вроде не менял

Комментарий оставлен 23.09.2015 - 15:27

нет, я имею ввиду открыть хтмл код страницы и посмотреть какая строчка выше - подключения jquery once или ваша строчка использования.
если используется раньше чем подключается то может возникать ошибки
undefined или
неизвестный класс...

Комментарий оставлен 23.09.2015 - 15:56

в html все что нужное(системное) все вверху, и once и drupal

Комментарий оставлен 24.09.2015 - 08:56