Puncte:0

Formular cu problema ajax și javascript

drapel br

Recreez întrebarea cu date mai precise (Întrebare originală Formular cu problema ajax și javascript). Am un buton în formularul meu care generează un set de câmpuri prin ajax. Când încerc să urmăresc clic pe acest buton cu jQuery, pur și simplu nu vede acest buton. ID-ul butonului este afișat mai jos.introduceți descrierea imaginii aici Am încercat să țin evidența utilizării doar a unei intrări ca selector, tot nu funcționează. Javascript este exact conectat, când dau clic pe butonul de trimitere, rezultatul este acolo.introduceți descrierea imaginii aici Aici este codul php.

funcția publică buildForm(array $form, FormStateInterface $form_state) {
    $config = \Drupal::config('pizza_javascript.settings');
    $type_pizza_config = $config->get('Types_pizza');
    $district_config = $config->get('District');
    $sum_order =0;
    foreach ($type_pizza_config ca $key=>$name){
      $pizza_type[$name['Price']] = $name['Nume'];
    }

    foreach ($district_config ca $key=>$name){
      $blocks[$name['Preț']] = $nume['nume'];
    }


$num_pizza = $form_state->get('num_pizza');
dacă ($num_pizza === NULL) {
  $pizza_field = $form_state->set('num_pizza', 1);
  $num_pizza = 1;
}

$form['pizza_fieldset_general'] = [
  '#type' => 'fieldset',
  „#tree” => ADEVĂRAT,
  '#title' => $this->t('Comenzi'),
  '#prefix' => '<div id="pizza-fieldset-general-wrapper">',
  '#sufix' => '</div>',
];
pentru ($i = 0; $i < $num_pizza; $i++) {
  $form['pizza_fieldset_general']['pizza_fieldset'][$i] = [
    '#type' => 'fieldset',
    „#tree” => ADEVĂRAT,
    '#title' => $this->t('Pizza la comandă'),
  ];
  $form['pizza_fieldset_general']['pizza_fieldset'][$i]['name'] = [
    '#type' => 'selectați',
    '#title' => $this->t('Type pizza'),
    „#tree” => ADEVĂRAT,
    '#options' => $pizza_type,
    '#default_value' => '940',
    '#attributes' => ['id' => 'select-pizza-'.$i],
  ];

  $form['pizza_fieldset_general']['pizza_fieldset'][$i]['count'] = [
    '#type' => 'selectați',
    '#title' => $this->t('Numără pizza'),
    „#tree” => ADEVĂRAT,
    '#options' => interval (0, 10),
    '#attributes' => ['id' => 'select-count-'.$i],
  ];
}

$form['pizza_fieldset_general']['actions'] = [
  '#type' => 'acțiuni',
];


$form['pizza_fieldset_general']['actions']['add_pizza'] = [
  '#type' => 'trimite',
  '#value' => $this->t('Adăugați o pizza'),
  '#submit' => ['::addOnePizza'],
  '#ajax' => [
    'callback' => '::addmorepizzaCallback',
    'wrapper' => 'pizza-fieldset-general-wrapper',
  ],
];
dacă ($num_pizza > 1) {
  $form['pizza_fieldset_general']['actions']['remove_pizza'] = [
    '#type' => 'trimite',
    '#value' => $this->t('Eliminați unul'),
    '#submit' => ['::removeCallback'],
    '#ajax' => [
      'callback' => '::addmorepizzaCallback',
      'wrapper' => 'pizza-fieldset-general-wrapper',
    ],
  ];
}

$form['bloc'] = [
  '#title' => 'Ordine de district',
  '#type' => 'radiouri',
  '#options' => $blocuri,
];


$form['telefon'] = [
  '#type' => 'câmp text',
  '#title' => $this->t('Număr de telefon'),
  '#description' => $this->t('Exemplu de număr de telefon +79261234567, 89261234567, 8(926)123-45-67'),
];

$form['adresa'] = [
  '#type' => 'câmp text',
  '#title' => $this->t('Ordinea adresei'),
  '#description' => $this->t('Adresa la comanda'),
];

$form['all_price'] = [
  '#type' => 'câmp text',
  '#title' => $this->t('Comandă de preț'),
  '#attributes' => array('readonly' => 'readonly'),
];

$form['pizza_price'] = [
  '#type' => 'câmp text',
  '#title' => $this->t('Prețul pizza'),
  '#attributes' => array('readonly' => 'readonly'),
];




$form['actions']['submit'] = [
  '#type' => 'trimite',
  '#value' => $this->t('Trimite'),
];


$form['#attached']['library'][] = 'pizza_javascript/pizzaJS';
$form['#attached']['drupalSettings']['data']['blockprice'] = $form_state->getValue('block');
$form['#attached']['drupalSettings']['data']['count_pizza'] = $num_pizza;

returnează $form;


 }



funcția publică addmorepizzaCallback(matrice &$form, FormStateInterface $form_state) {
    returnează $form['pizza_fieldset_general'];
  }




 
  funcția publică addOnePizza(matrice &$form, FormStateInterface $form_state) {
    $pizza_field = $form_state->get('num_pizza');
    $add_button = $câmp_pizza + 1;
    $form_state->set('num_pizza', $add_button);
    $form_state->setRebuild();
  }


  
  funcția publică removeCallback(matrice &$form, FormStateInterface $form_state) {
    $pizza_field = $form_state->get('num_pizza');
    dacă ($câmp_pizza > 1) {
      $remove_button = $pizza_field - 1;
      $form_state->set('num_pizza', $remove_button);
    }
    $form_state->setRebuild();
  }

Cod javascript.

(funcție ($, Drupal) {
  Drupal.behaviors.myBehaviour = {
    atașați: funcție (context, setări) {

     $('#edit-pizza-fieldset-general-actions-add-pizza',context).on('click',function (){
       console.log('Bună lume!!!');
     })
      $('input').on('clic',functie (){
       console.log('Bună lume!!!');
     })

    }

  }

})(jQuery, Drupal);

Deoarece țin evidența elementelor de intrare, câmpurile generatoare de butoane trebuie să fie afișate, dar acest lucru nu se întâmplă.introduceți descrierea imaginii aici Va rog sa ma ajutati sa inteleg care este problema. Scuze pentru engleza mea, am folosit google translated

Kevin avatar
drapel in
De unde știi că JS este atașat?
Павел Герасюта avatar
drapel br
Js este exact atașat, verificat. Console.log se declanșează când îl apelez folosind selectorul de intrare. $('input').on('clic',functie (){ console.log('Bună lume!!!'); })
Павел Герасюта avatar
drapel br
Dar funcționează doar pe butoanele de trimitere a formularului. $form['actions']['submit'] = [ '#type' => 'trimite', '#value' => $this->t('Trimite'), ];
sonfd avatar
drapel in
Cel mai simplu răspuns la aceasta este că selectorul tău este greșit. Puteți adăuga, vă rog, markupul redat real al formularului la întrebare? i.e. ce ați vedea când utilizați inspectorul browserului sau vizualizați sursa paginii.
Павел Герасюта avatar
drapel br
Am actualizat întrebarea cu informații mai precise
No Sssweat avatar
drapel ua
Presupun că ajax-ul tău regenerează butonul; astfel, poate că ID-ul se schimbă în ceva de genul `#edit-pizza-fieldset-general-actions-add-pizza-1`. Așa că încercați să îl vizați folosind wrapper-ul în loc `$('.pizza-fieldset-general-wrapper .form-submit').on('click',function (){`

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.