Я воссоздаю вопрос с более точными данными (Исходный вопрос Форма с проблемой ajax и javascript).
У меня есть кнопка в моей форме, которая генерирует набор полей через ajax. Когда я пытаюсь отследить нажатие этой кнопки с помощью jQuery, он просто не видит эту кнопку. Идентификатор кнопки показан ниже.
Я пытался отслеживать использование только ввода в качестве селектора, все равно не работает. Javascript точно подключен, когда я нажимаю кнопку отправки, вывод есть.
Вот php-код.
общедоступная функция buildForm (массив $ form, FormStateInterface $ form_state) {
$config = \Drupal::config('pizza_javascript.settings');
$type_pizza_config = $config->get('Types_pizza');
$district_config = $config->get('Район');
$sum_order = 0;
foreach ($type_pizza_config как $key=>$name){
$pizza_type[$name['Цена']] = $name['Имя'];
}
foreach ($district_config как $key=>$name){
$blocks[$name['Цена']] = $name['name'];
}
$num_pizza = $form_state->get('num_pizza');
если ($num_pizza === NULL) {
$pizza_field = $form_state->set('num_pizza', 1);
$num_pizza = 1;
}
$form['pizza_fieldset_general'] = [
'#тип' => 'набор полей',
'#дерево' => ИСТИНА,
'#title' => $this->t('Заказы'),
'#prefix' => '<div id="pizza-fieldset-general-wrapper">',
'#суффикс' => '</div>',
];
для ($i = 0; $i < $num_pizza; $i++) {
$form['pizza_fieldset_general']['pizza_fieldset'][$i] = [
'#тип' => 'набор полей',
'#дерево' => ИСТИНА,
'#title' => $this->t('Пицца на заказ'),
];
$form['pizza_fieldset_general']['pizza_fieldset'][$i]['name'] = [
'#тип' => 'выбрать',
'#title' => $this->t('Введите пиццу'),
'#дерево' => ИСТИНА,
'#options' => $pizza_type,
'#default_value' => '940',
'#attributes' => ['id' => 'выбрать-пицца-'.$i],
];
$form['pizza_fieldset_general']['pizza_fieldset'][$i]['count'] = [
'#тип' => 'выбрать',
'#title' => $this->t('Считать пиццу'),
'#дерево' => ИСТИНА,
'#options' => диапазон (0, 10),
'#attributes' => ['id' => 'select-count-'.$i],
];
}
$form['pizza_fieldset_general']['actions'] = [
'#type' => 'действия',
];
$form['pizza_fieldset_general']['actions']['add_pizza'] = [
'#type' => 'отправить',
'#value' => $this->t('Добавить одну пиццу'),
'#submit' => ['::addOnePizza'],
'#ajax' => [
'callback' => '::addmorepizzaCallback',
'обертка' => 'пицца-fieldset-общая-обертка',
],
];
если ($num_pizza > 1) {
$form['pizza_fieldset_general']['actions']['remove_pizza'] = [
'#type' => 'отправить',
'#value' => $this->t('Удалить один'),
'#submit' => ['::removeCallback'],
'#ajax' => [
'callback' => '::addmorepizzaCallback',
'обертка' => 'пицца-fieldset-общая-обертка',
],
];
}
$ форма ['блок'] = [
'#title' => 'Районный порядок',
'#type' => 'радио',
'#options' => $блоки,
];
$ форма ['телефон'] = [
'#тип' => 'текстовое поле',
'#title' => $this->t('Номер телефона'),
'#description' => $this->t('Пример номера телефона +79261234567, 89261234567, 8(926)123-45-67'),
];
$ форма ['адрес'] = [
'#тип' => 'текстовое поле',
'#title' => $this->t('Порядок адресов'),
'#description' => $this->t('Адрес для заказа'),
];
$ форма ['all_price'] = [
'#тип' => 'текстовое поле',
'#title' => $this->t('Цена заказа'),
'#attributes' => массив('только для чтения' => 'только для чтения'),
];
$form['pizza_price'] = [
'#тип' => 'текстовое поле',
'#title' => $this->t('Цена пиццы'),
'#attributes' => массив('только для чтения' => 'только для чтения'),
];
$form['действия']['отправить'] = [
'#type' => 'отправить',
'#value' => $this->t('Отправить'),
];
$form['#attached']['library'][] = 'pizza_javascript/pizzaJS';
$form['#attached']['drupalSettings']['data']['blockprice'] = $form_state->getValue('block');
$form['#attached']['drupalSettings']['data']['count_pizza'] = $num_pizza;
вернуть $ форму;
}
общедоступная функция addmorepizzaCallback (массив и $ форма, FormStateInterface $ form_state) {
возврат $form['pizza_fieldset_general'];
}
общедоступная функция addOnePizza (массив и $ форма, FormStateInterface $ form_state) {
$pizza_field = $form_state->get('num_pizza');
$add_button = $pizza_field + 1;
$form_state->set('num_pizza', $add_button);
$form_state->setRebuild();
}
общедоступная функция removeCallback (массив и $ форма, FormStateInterface $ form_state) {
$pizza_field = $form_state->get('num_pizza');
если ($pizza_field > 1) {
$remove_button = $pizza_field - 1;
$form_state->set('num_pizza', $remove_button);
}
$form_state->setRebuild();
}
Код JavaScript.
(функция ($, Друпал) {
Drupal.behaviors.myBehaviour = {
прикрепить: функция (контекст, настройки) {
$('#edit-pizza-fieldset-general-actions-add-pizza',context).on('click',function (){
console.log('Привет, мир!!!');
})
$('ввод').on('щелчок',функция (){
console.log('Привет, мир!!!');
})
}
}
})(jQuery, Drupal);
Так как я отслеживаю элементы ввода, должны отображаться поля генерации кнопок, но этого не происходит.
Пожалуйста, помогите мне понять, в чем проблема. Извините за мой английский, я использовал перевод Google