Điểm:0

Biểu mẫu có vấn đề về ajax và javascript

lá cờ br

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.nhập mô tả hình ảnh ở đây 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ẽ ở đó.nhập mô tả hình ảnh ở đây Đâ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.nhập mô tả hình ảnh ở đây 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

Kevin avatar
lá cờ in
Làm thế nào để bạn biết JS được đính kèm?
Павел Герасюта avatar
lá cờ br
Js được gắn chính xác, đã kiểm tra. Console.log kích hoạt khi tôi gọi nó bằng bộ chọn đầu vào. $('input').on('click',function (){ console.log('Xin chào thế giới!!!'); })
Павел Герасюта avatar
lá cờ br
Nhưng nó chỉ hoạt động trên các nút gửi biểu mẫu. $form['actions']['submit'] = [ '#type' => 'gửi', '#value' => $this->t('Gửi'), ];
sonfd avatar
lá cờ in
Câu trả lời đơn giản nhất cho điều này là bộ chọn của bạn sai. Bạn có thể vui lòng thêm đánh dấu được hiển thị thực tế của biểu mẫu vào câu hỏi không? I E. những gì bạn sẽ thấy khi sử dụng trình kiểm tra của trình duyệt hoặc xem nguồn trang.
Павел Герасюта avatar
lá cờ br
Cập nhật câu hỏi với thông tin chính xác hơn
No Sssweat avatar
lá cờ ua
Tôi đoán là ajax của bạn tạo lại nút; do đó, có lẽ ID thay đổi thành thứ gì đó như `#edit-pizza-fieldset-General-actions-add-pizza-1`. Vì vậy, hãy thử nhắm mục tiêu nó bằng trình bao bọc thay vì `$('.pizza-fieldset-general-wrapper .form-submit').on('click',function (){`

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.