Рейтинг:-3

Как прочитать атрибут элемента из $form_state?

флаг in

Я пытаюсь скрыть идентификатор объекта из полей автозаполнения. Я скачал скрипт jquery, который удаляет идентификатор в квадратных скобках и обновляет элемент автозаполнения новым элементом. Затем он записывает все значение в данные элемента следующим образом.

$(event.target).data('реальное значение','6');

Я даже обновил это, чтобы использовать attr вместо данных, я не могу прочитать эту информацию из моего Drupal form_state.

Я установил атрибут данных в своем элементе автозаполнения, используя jquery, как это

$(event.target).attr('реальное значение','6');

Как мне получить это значение из моего объекта $formstate или $form в моей функции отправки формы? С использованием дпм ($ форма ['имя элемента']) даже не показывает этот атрибут.

я пытался $formstate->получить значение(). Не работает?

Вот скрипт, который я использую...

скрыть идентификатор автозаполнения jquery

Просто интересно, почему jquery успешно изменяет значение текстового поля автозаполнения, но не может изменить атрибут того же элемента?

флаг id
Поскольку JavaScript добавил атрибут, я не понимаю, как система форм Drupal узнает об этом.
ilechcod avatar
флаг in
Спасибо, Цилефен. Но я также попытался добавить атрибут в элемент формы, используя Drupal `'#attributes => ['test']`, а затем попытался изменить значение атрибута в jquery. Но formstate по-прежнему возвращает «тест» в качестве значения.
флаг id
Если вы пробовали это с другим кодом, то это другой вопрос. Также атрибуты данных не являются атрибутами данных, если они не начинаются с `data-`. https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes
Рейтинг:1
флаг id

Это невозможно, как написано. В системе форм Drupal нет информации об атрибутах, добавленных исключительно с помощью JavaScript.

Система форм Drupal не имеет информации об атрибутах модифицированный исключительно с помощью JavaScript.

ilechcod avatar
флаг in
Спасибо, Цилефен, но это, очевидно, мне совсем не помогает. Мне нужно знать, как изменить существующие атрибуты элемента формы и прочитать их из Drupal 8. В конце концов, ajax обычно используется для замены значения текстового поля с помощью jquery. Пожалуйста, как я могу добиться этого результата?
ilechcod avatar
флаг in
Ваш ответ не указывает мне правильное направление, как достичь моей цели.
apaderno avatar
флаг us
Этот ответ правильный: в Drupal AJAX, используемый в форме, по-прежнему включает PHP-код. PHP не будет знать об атрибуте, добавленном кодом JavaScript.
флаг id
Вопрос спрашивает, как это сделать с помощью JavaScript определенным образом. Я правильно ответил, что нельзя. Задайте другой вопрос, чтобы получить другой ответ. Я не знаю, что вы на самом деле пытаетесь сделать.
флаг id
Я просто догадываюсь, но вам может понадобиться Ajax API https://www.drupal.org/docs/drupal-apis/javascript-api/ajax-forms
ilechcod avatar
флаг in
Спасибо, Цилефен.Я обновил вопрос, чтобы показать, что именно я пытаюсь сделать. Также я не могу сделать это с помощью Chosen Ajax, так как я на Drupal 8. Спасибо.
флаг cn
@ilechcod похоже, что вы в корне не понимаете, как работают HTML-формы - все, что может быть отправлено, - это текущее значение элемента ввода, произвольные атрибуты, такие как те, которые вы добавляете, никогда не отправляются. Конечно, вы можете делать с JS все, что хотите, чтобы манипулировать значениями до того, как они будут отправлены, но браузер, который ведет себя сам, никогда не попытается отправить атрибуты в действие формы.
ilechcod avatar
флаг in
@Clive - другими словами, невозможно сохранить что-то в существующем атрибуте элемента с помощью jquery, а затем прочитать атрибут из системы форм Drupal. Правильно. Итак, каким еще способом я могу достичь своей цели, пожалуйста? Я знаю, что могу запустить событие ajax из автозаполнения, установить значение атрибута с помощью invokecommand, а затем вернуть ajaxrespose. Но я просто подумал, что было бы хорошо установить атрибут автозаполнения в том же месте, где было установлено его значение - в обработчике выбора. Это более чистый код. Так что ты думаешь? Спасибо
флаг cn
Один из подходов состоит в том, чтобы добавить скрытое поле (`'#type' => 'hidden'`) и установить его значение с помощью JS. Это должно быть получено при отправке формы

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

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