Puncte:0

Adăugați un ascultător de evenimente pentru a selecta lista

drapel cn

Am atașat următorul js la un câmp de formular de vizualizări expuse și funcționează la încărcarea primei pagini, dar când formularul este schimbat (prin ajax) nu se declanșează.

Nu prea știu unde să adaug un ascultător de evenimente pentru schimbarea listei de selectare.

Următoarele nu utilizează jQuery, dar utilizează biblioteca de bază o dată, așa că aș dori să evit jQuery.

/**
 * @fișier
 * Ajustări ale paginii de destinație.
 */

 (funcție (Drupal, o dată) {
    „utilizați strict”;
  
    /**
     * Comportamentul atașat pentru Custom DataLayer.
     *
     * @type {{attach: Drupal.behaviors.CurrentSelectOption.attach}}
     */
    Drupal.behaviors.CurrentSelectOption = {
      atașare: funcție atașare (context) {
        // Încărcarea primei pagini
        let elements = once('CurrentSelectOption', 'select#edit-field-event-country.form-select', context);
        elements.forEach(processingCallback);
      }
    };
  
    function processingCallback(valoare, index) {
      let option = value.options[value.selectedIndex]
      valoare.eliminare (opțiune);
      valoare.adăugată (opțiune, 0);
    }

})(Drupal, o dată);
Jaypan avatar
drapel de
De ce eviți jQuery? Vine la pachet cu miez. Au trecut aproape 2 decenii de când am scris JS brut fără jQuery, așa că îmi este greu să ofer soluția, deși aș avea una fără această cerință.
drapel cn
Nu am vrut să adaug o altă dependență la script dacă nu era nevoie și a funcționat în afară de a nu fi declanșat când a fost schimbat formularul. Nu am nimic împotriva jQuery :-)
Puncte:0
drapel cn

Când se efectuează un apel AJAX prin API-ul Drupal, comportamentele sunt reatașate. Deci, dacă API-ul este în uz, răspunsul este pur și simplu să puneți codul în interiorul atașați metoda în comportamentul tău, acolo unde o ai deja.

Întorsătura este: nu folosiți ID-uri pentru a viza elemente. Aceasta este o regulă generală de cea mai bună practică pentru selecția CSS/JS DOM, dar mai ales importantă aici, deoarece Drupal va genera un nou ID pentru elementul de formular pe care îl înlocuiește. Dacă inspectați selecția și învelișul său după apelul AJAX, veți vedea -2 atașat la ID-ul inițial.

În afară de asta (fără un test), codul tău arată bine.

drapel cn
Uitasem că :-) folosind o clasă a rezolvat problema.

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.