Как работать с .once()

Главные вкладки

Аватар пользователя Decadent42 Decadent42 2 ноября 2015 в 17:50

Создал поле(field) которое состоит из 3 полей: 2 скрытые и 1 textfield, добавил к ним id, прописал к нему путь для .js файла, в котором находится JQuery Autocomplete с созданными виджетами(их 2 - один показывается, когда значения есть, другой показывается, когда значений нет и при нажатии создаёт термин), поля подключены к FieldCollection. Всё работает, всё очень классно. Но при добавлении новых групп полей FieldCollection, JQuery остаётся обрабатывать самые первые поля, игнорируя новые (т.к. поменялся класс), перекидывая данные вводимые во 2, 3, 4, 5 поле на первое. На форуме подсказали, что нужно работать с .once(), и вот я уже 4 дня сижу и пытаюсь подкинуть в него свой код, но либо ничего не происходит, либо jquery вообще перестаёт работать. Вот код:

(function ($) {

Drupal.behaviors.jqe = {
  attach: function (context, settings) {
   
        $('#fields-nazvaniye').once(function () {
        $("#fields-nazvaniye", context).makeJqeAutocomplete();
      });
  }// attach
};
// Селект внутри makeJqeAutocomplete
      select: function(event, ui) {
        // nid скрытому полю.
        $('#fields_href').val(ui.item ? ui.item.value.href : 0);
        // текст - в поле.
        $input.val(ui.item ? ui.item.value.title : this.value);
                $('#fields_class').val(ui.item ? ui.item.value.class : '');
        return false;
      }
    });
    return this;
  };
 
 
 
 ПОМОГИТЕ, ПОЖАЛУЙСТА!

Комментарии

Аватар пользователя sg85 sg85 2 ноября 2015 в 19:56

не осилил много букв, Вы бы еще исходники jQuery и Drupal.ajax выложили, лень читать что там у Вас, суть у $.once примерно следующая - $(".class-name").once("my-processed",some_func) сделает то же самое, что и $(".class-name:not(.my-processed)").addClass("my-processed").each(some_func); только чуть медленнее, за то удобнее.

Аватар пользователя Decadent42 Decadent42 3 ноября 2015 в 0:08

Ага, а в качестве селектора подойдёт id? И ещё: куда вставлять .once на обработчике в select или прописывать его в Drupal.behaviors?

Аватар пользователя Decadent42 Decadent42 3 ноября 2015 в 21:32

Я смотрел эти примеры и делаю всё по ним, но ничего не получается, опять:

Drupal.behaviors.jqe = {
  attach: function (context, settings) {
   
        $('.fields-nazvaniye').once('demo-fields', function () {
        $(".fields-nazvaniye", context).makeJqeAutocomplete();
      });
  }// attach
};

Или в select запихивал - тоже ничего не происходит:

select: function(event, ui) {
        // nid скрытому полю.
                $('.fields_href').once('demo', function () {
        $('.fields_href').val(ui.item ? ui.item.value.href : 0);
                });
        // текст - в поле.
                $('.fields_nazvaniye').once('demo', function () {
        $('.fields-nazvaniye').val(ui.item ? ui.item.value.title : this.value);
                });
                $('.fields_class').once('demo', function () {
                $('.fields_class').val(ui.item ? ui.item.value.class : '');
                });
        return false;

- значения как подставлялись не туда (в филдсетах коллекции полей) так и подставляются. Sad Да и в интернете решение проблемы не могу найти Sad