Рейтинг:-2

JQuery для перемещения поля над таблицей - изменения во время обновления страницы

флаг in

У меня есть приведенный ниже код jquery для перемещения поля множественного выбора и кнопки над таблицей.

jQuery (документ) .ready (функция ($) {
  $('#views-form-resources-block-1 .form-item-ka-types').insertBefore($('#views-form-myblock-block-1 table'));
  $('#views-form-resources-block-1 #edit-actions--2').insertAfter($('#views-form-myblock-block-1 .form-item-ka-types'));
});

В этом коде я перемещаю поле ka-types над представлением myblock. Графическое представление, как показано ниже:

введите описание изображения здесь

Этот код отлично работает, когда я сначала загружаю страницу. Но когда я обновляю страницу, мультиселект падает и показывает испорченные. снова, когда я обновляю страницу, она работает нормально. не уверен, в чем проблема. Любая помощь о том, как это можно исправить?

Kevin avatar
флаг in
Javascript написан таким образом, что Drupal не прикрепит его при изменении dom, поэтому при перестроении формы он будет потерян. Вероятно, проще переопределить этот шаблон Views, чтобы переместить фильтр, а не принудительно с помощью jquery.
Kevin avatar
флаг in
В противном случае просмотрите документацию Drupal в Drupal Behaviors.
sonfd avatar
флаг in
Я бы также рекомендовал сделать это с шаблоном представления yourjavas. Подобные изменения JavaScript приведут к смещению содержимого страницы, что не очень хорошо для UX.Это может даже негативно повлиять на вашу поисковую оптимизацию, поскольку важным фактором является оценка страницы [Cumulative Layout Shift (CLS)](https://web.dev/cls/).
Hermann Schwarz avatar
флаг cn
Не могли бы вы уточнить, что означает первое обновление? Отправка формы? Так что, возможно, DOM выглядит немного иначе после отправки.
Hermann Schwarz avatar
флаг cn
Вы также можете проверить, показывает ли консоль веб-инструментов какую-либо ошибку JS, чтобы ваш JS никогда не выполнялся после отправки формы (первое обновление)
Jiah avatar
флаг in
Я могу добиться этого, используя Drupal Behaviors.
Рейтинг:1
флаг in

Ниже приведено мое решение для этого:

(функция($, Друпал) {
  Drupal.behaviors.searchResults = {
    прикрепить: функция () {
      $('#views-form-resources-block-1 .form-item-ka-types')
        .insertBefore($('#views-form-myblock-block-1 table'));
      $('#views-form-resources-block-1 #edit-actions--2')
        .insertAfter($('#views-form-myblock-block-1 .form-item-ka-types'));
    }
  };
}(jQuery, Друпал));

@Кевин прав. Когда форма перестраивается, изменения DOM теряются. Лучшее понимание поведения Drupal ссылка имеет отличное объяснение и примеры поведения Drupal.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.