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.
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.
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ă.
Va rog sa ma ajutati sa inteleg care este problema. Scuze pentru engleza mea, am folosit google translated