Tôi tạo lại câu hỏi với dữ liệu chính xác hơn (Câu hỏi gốc Biểu mẫu có vấn đề về ajax và javascript).
Tôi có một nút trong biểu mẫu của mình để tạo bộ trường thông qua ajax. Khi tôi cố gắng theo dõi nút này được nhấp bằng jQuery, nó không thấy nút này. Id của nút được hiển thị bên dưới.
Tôi đã cố gắng theo dõi chỉ sử dụng một đầu vào làm bộ chọn, nó vẫn không hoạt động. Javascript được kết nối chính xác, khi tôi nhấp vào nút gửi, đầu ra sẽ ở đó.
Đây là mã php.
hàm công khai buildForm(mảng $form, FormStateInterface $form_state) {
$config = \Drupal::config('pizza_javascript.settings');
$type_pizza_config = $config->get('Types_pizza');
$district_config = $config->get('Quận');
$sum_order =0;
foreach ($type_pizza_config as $key=>$name){
$pizza_type[$name['Price']] = $name['Name'];
}
foreach ($district_config as $key=>$name){
$blocks[$name['Price']] = $name['name'];
}
$num_pizza = $form_state->get('num_pizza');
nếu ($num_pizza === NULL) {
$pizza_field = $form_state->set('num_pizza', 1);
$num_pizza = 1;
}
$form['pizza_fieldset_general'] = [
'#type' => 'bộ trường',
'#cây' => ĐÚNG,
'#title' => $this->t('Đơn hàng'),
'#prefix' => '<div id="pizza-fieldset-general-wrapper">',
'#suffix' => '</div>',
];
for ($i = 0; $i < $num_pizza; $i++) {
$form['pizza_fieldset_general']['pizza_fieldset'][$i] = [
'#type' => 'bộ trường',
'#cây' => ĐÚNG,
'#title' => $this->t('Pizza để đặt hàng'),
];
$form['pizza_fieldset_general']['pizza_fieldset'][$i]['name'] = [
'#type' => 'chọn',
'#title' => $this->t('Nhập bánh pizza'),
'#cây' => ĐÚNG,
'#options' => $pizza_type,
'#default_value' => '940',
'#attributes' => ['id' => 'select-pizza-'.$i],
];
$form['pizza_fieldset_general']['pizza_fieldset'][$i]['count'] = [
'#type' => 'chọn',
'#title' => $this->t('Đếm pizza'),
'#cây' => ĐÚNG,
'#options' => phạm vi (0, 10),
'#attributes' => ['id' => 'select-count-'.$i],
];
}
$form['pizza_fieldset_General']['actions'] = [
'#type' => 'hành động',
];
$form['pizza_fieldset_General']['actions']['add_pizza'] = [
'#type' => 'gửi',
'#value' => $this->t('Thêm một chiếc bánh pizza'),
'#submit' => ['::addOnePizza'],
'#ajax' => [
'gọi lại' => '::addmorepizzaCallback',
'trình bao bọc' => 'pizza-fieldset-General-Wrapper',
],
];
nếu ($num_pizza > 1) {
$form['pizza_fieldset_General']['actions']['remove_pizza'] = [
'#type' => 'gửi',
'#value' => $this->t('Xóa một'),
'#submit' => ['::removeCallback'],
'#ajax' => [
'gọi lại' => '::addmorepizzaCallback',
'trình bao bọc' => 'pizza-fieldset-General-Wrapper',
],
];
}
$form['khối'] = [
'#title' => 'Quận lệnh',
'#type' => 'radio',
'#options' => $blocks,
];
$form['phone'] = [
'#type' => 'trường văn bản',
'#title' => $this->t('Số điện thoại'),
'#description' => $this->t('Số điện thoại ví dụ +79261234567, 89261234567, 8(926)123-45-67'),
];
$form['địa chỉ'] = [
'#type' => 'trường văn bản',
'#title' => $this->t('Thứ tự địa chỉ'),
'#description' => $this->t('Địa chỉ đặt hàng'),
];
$form['all_price'] = [
'#type' => 'trường văn bản',
'#title' => $this->t('Đơn hàng giá'),
'#attributes' => mảng('chỉ đọc' => 'chỉ đọc'),
];
$form['pizza_price'] = [
'#type' => 'trường văn bản',
'#title' => $this->t('Giá pizza'),
'#attributes' => mảng('chỉ đọc' => 'chỉ đọc'),
];
$form['actions']['submit'] = [
'#type' => 'gửi',
'#value' => $this->t('Gửi'),
];
$form['#attached']['library'][] = 'pizza_javascript/pizzaJS';
$form['#attached']['drupalSettings']['data']['blockprice'] = $form_state->getValue('block');
$form['#attached']['drupalSettings']['data']['count_pizza'] = $num_pizza;
trả về biểu mẫu $;
}
chức năng công cộng addmorepizzaCallback(mảng &$form, FormStateInterface $form_state) {
trả về $form['pizza_fieldset_General'];
}
chức năng công cộng addOnePizza(mảng &$form, 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();
}
hàm công khai removeCallback(mảng &$form, FormStateInterface $form_state) {
$pizza_field = $form_state->get('num_pizza');
nếu ($pizza_field > 1) {
$remove_button = $pizza_field - 1;
$form_state->set('num_pizza', $remove_button);
}
$form_state->setRebuild();
}
Mã javascript.
(hàm ($, Drupal) {
Drupal.behaviors.myBehaviour = {
đính kèm: chức năng (bối cảnh, cài đặt) {
$('#edit-pizza-fieldset-General-actions-add-pizza',context).on('click',function (){
console.log('Xin chào thế giới!!!');
})
$('input').on('click',function (){
console.log('Xin chào thế giới!!!');
})
}
}
})(jQuery, Drupal);
Vì tôi theo dõi các yếu tố đầu vào nên các trường tạo nút phải hiển thị, nhưng điều này không xảy ra.
Xin hãy giúp tôi hiểu vấn đề là gì. Xin lỗi vì tiếng Anh của tôi, tôi đã sử dụng google dịch