Puncte:-3

Cum citesc atributul elementului din $form_state?

drapel in

Încerc să ascund id-ul de entitate din câmpurile mele de completare automată. Am descărcat un script jquery care elimină id-ul dintre paranteze și actualizează elementul de completare automată cu noul element. Apoi scrie întreaga valoare în datele elementului astfel

$(event.target).data('real-value','6');

Chiar am actualizat acest lucru pentru a folosi attr în loc de date, nu pot citi aceste informații din form_state Drupal.

Am setat un atribut de date pe elementul meu de autocompletare folosind jquery ca acesta

$(event.target).attr('valoare-reala','6');

Cum obțin această valoare de la obiectul meu $formstate sau $form în funcția mea de trimitere a formularului? Folosind dpm($form['elementname']) nici măcar nu arată această trăsătură.

Am încercat $formstate->getValue(). Nu merge?

Iată scriptul pe care îl folosesc...

ascunde id-ul de completare automată jquery

Mă întreb de ce jquery modifică cu succes valoarea casetei de text de completare automată, dar nu poate schimba un atribut pe același element?

drapel id
Deoarece JavaScript a adăugat atributul, nu văd cum ar ști sistemul Drupal Form despre el.
ilechcod avatar
drapel in
Multumesc Cilefen. Dar am încercat și să adaug atributul la elementul formular folosind Drupal `'#attributes => ['test']` și apoi am încercat să schimb valoarea atributului în jquery. Dar formstate returnează în continuare „test” ca valoare.
drapel id
Dacă ați încercat acest lucru cu alt cod, atunci aceasta este o altă întrebare. De asemenea, atributele de date nu sunt atribute de date dacă nu încep cu `data-`. https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes
Puncte:1
drapel id

Acest lucru este imposibil așa cum este scris. Sistemul de formulare Drupal nu are informații despre atributele adăugate exclusiv de JavaScript.

Sistemul de formulare Drupal nu are informații despre atribute modificat exclusiv prin JavaScript.

ilechcod avatar
drapel in
Mulțumesc Cilefen, dar acest lucru evident nu mă ajută deloc. Trebuie să știu cum să modific atributele elementului de formular existente și să le citesc din Drupal 8. La urma urmei, ajax este folosit în mod obișnuit pentru a înlocui o valoare de câmp text folosind jquery. Vă rog, cum pot obține acest rezultat?
ilechcod avatar
drapel in
Răspunsul tău nu mă îndreaptă în direcția corectă pentru a-mi atinge scopul.
apaderno avatar
drapel us
Acest răspuns este corect: în Drupal, AJAX folosit într-un formular implică încă cod PHP. PHP nu va ști despre un atribut adăugat de codul JavaScript.
drapel id
Întrebarea se întreabă cum să faci asta cu JavaScript într-un mod specific. Am răspuns pe bună dreptate că nu se poate. Pune o altă întrebare pentru un alt răspuns. Nu știu ce încerci de fapt să faci.
drapel id
Banuiesc, dar este posibil să aveți nevoie de API-ul Ajax https://www.drupal.org/docs/drupal-apis/javascript-api/ajax-forms
ilechcod avatar
drapel in
Multumesc Cilefen.Am actualizat întrebarea pentru a arăta exact ce încerc să fac. De asemenea, nu pot face acest lucru folosind Chosen Ajax, deoarece sunt pe Drupal 8. Mulțumesc
drapel cn
@ilechcod se pare că ați putea înțelege greșit cum funcționează formularele HTML - tot ceea ce poate fi trimis este valoarea curentă a unui element de intrare, atributele arbitrare precum cele pe care le adăugați nu sunt niciodată trimise. Puteți face orice doriți cu JS pentru a manipula valorile înainte ca acestea să fie trimise, desigur, dar un browser care se comportă singur nu va încerca niciodată să trimită atribute la acțiunea formularului.
ilechcod avatar
drapel in
@Clive - cu alte cuvinte, nu este posibil să stocați ceva pe un atribut de element existent folosind jquery și apoi să citiți atributul din sistemul de formulare Drupal. Dreapta. Deci, în ce alt mod îmi pot atinge scopul, vă rog? Știu că pot declanșa un eveniment ajax din autocompletare, pot seta valoarea atributului folosind invokecommand și apoi pot returna un ajaxrespose. Dar am simțit că ar fi bine să setăm atributul de completare automată în același loc în care valoarea sa era setată - în handlerul de selecție. Acesta este un cod mai curat. Deci ce crezi? Mulțumiri
drapel cn
O abordare ar fi să adăugați un câmp ascuns (`'#type' => 'ascuns'`) și să setați valoarea acestuia cu JS. Acest lucru ar trebui să fie preluat în formularul de depunere

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.