Score:0

แบบฟอร์มที่มีปัญหา ajax และ javascript

ฉันสร้างคำถามใหม่ด้วยข้อมูลที่ถูกต้องมากขึ้น (คำถามเดิม แบบฟอร์มที่มีปัญหา ajax และ javascript). ฉันมีปุ่มในแบบฟอร์มที่สร้าง fieldset ผ่าน ajax เมื่อฉันพยายามติดตามปุ่มนี้ที่ถูกคลิกด้วย jQuery มันไม่เห็นปุ่มนี้ รหัสปุ่มแสดงอยู่ด้านล่างป้อนคำอธิบายรูปภาพที่นี่ ฉันพยายามติดตามโดยใช้เพียงอินพุตเป็นตัวเลือก แต่ก็ยังใช้งานไม่ได้ Javascript เชื่อมต่อกันพอดี เมื่อฉันคลิกที่ปุ่มส่ง ผลลัพธ์จะอยู่ที่นั่นป้อนคำอธิบายรูปภาพที่นี่ นี่คือรหัส php

ฟังก์ชันสาธารณะ buildForm (อาร์เรย์ $form, FormStateInterface $form_state) {
    $config = \Drupal::config('pizza_javascript.settings');
    $type_pizza_config = $config->get('ประเภทพิซซ่า');
    $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;
}

$แบบฟอร์ม['pizza_fieldset_general'] = [
  '#type' => 'ชุดฟิลด์',
  '#tree' => จริง,
  '#title' => $this->t('คำสั่งซื้อ'),
  '#prefix' => '<div id="pizza-fieldset-general-wrapper">',
  '#suffix' => '</div>',
];
สำหรับ ($i = 0; $i < $num_pizza; $i++) {
  $form['pizza_fieldset_general']['pizza_fieldset'][$i] = [
    '#type' => 'ชุดฟิลด์',
    '#tree' => จริง,
    '#title' => $this->t('สั่งพิซซ่า'),
  ];
  $form['pizza_fieldset_general']['pizza_fieldset'][$i]['ชื่อ'] = [
    '#type' => 'เลือก',
    '#title' => $this->t('พิมพ์พิซซ่า'),
    '#tree' => จริง,
    '#options' => $pizza_type,
    '#default_value' => '940',
    '#attributes' => ['id' => 'select-pizza-'.$i],
  ];

  $form['pizza_fieldset_general']['pizza_fieldset'][$i]['count'] = [
    '#type' => 'เลือก',
    '#title' => $this->t('นับพิซซ่า'),
    '#tree' => จริง,
    '#options' => ช่วง(0, 10),
    '#attributes' => ['id' => 'select-count-'.$i],
  ];
}

$form['pizza_fieldset_general']['การกระทำ'] = [
  '#type' => 'การกระทำ',
];


$form['pizza_fieldset_general']['actions']['add_pizza'] = [
  '#type' => 'ส่ง',
  '#value' => $this->t('เพิ่มพิซซ่าหนึ่งถาด'),
  '#submit' => ['::addOnePizza'],
  '#อาแจ็กซ์' => [
    'callback' => '::addmorepizzaCallback',
    'wrapper' => 'pizza-fieldset-general-wrapper',
  ]
];
ถ้า ($num_pizza > 1) {
  $form['pizza_fieldset_general']['actions']['remove_pizza'] = [
    '#type' => 'ส่ง',
    '#value' => $this->t('ลบหนึ่งรายการ'),
    '#submit' => ['::removeCallback'],
    '#อาแจ็กซ์' => [
      'callback' => '::addmorepizzaCallback',
      'wrapper' => 'pizza-fieldset-general-wrapper',
    ]
  ];
}

$รูปแบบ['บล็อก'] = [
  '#title' => 'ลำดับเขต',
  '#type' => 'วิทยุ',
  '#options' => $blocks,
];


$แบบฟอร์ม['โทรศัพท์'] = [
  '#type' => 'ช่องข้อความ',
  '#title' => $this->t('หมายเลขโทรศัพท์'),
  '#description' => $this->t('ตัวอย่างหมายเลขโทรศัพท์ +79261234567, 89261234567, 8(926)123-45-67'),
];

$แบบฟอร์ม['ที่อยู่'] = [
  '#type' => 'ช่องข้อความ',
  '#title' => $this->t('ลำดับที่อยู่'),
  '#description' => $this->t('ที่อยู่ในการสั่งซื้อ'),
];

$แบบฟอร์ม['all_price'] = [
  '#type' => 'ช่องข้อความ',
  '#title' => $this->t('ลำดับราคา'),
  '#attributes' => array('readonly' => 'readonly'),
];

$รูปแบบ['pizza_price'] = [
  '#type' => 'ช่องข้อความ',
  '#title' => $this->t('ราคาพิซซ่า'),
  '#attributes' => array('readonly' => 'readonly'),
];




$form['actions']['submit'] = [
  '#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 (อาร์เรย์ &$form, FormStateInterface $form_state) {
    ส่งคืน $form['pizza_fieldset_general'];
  }




 
  ฟังก์ชันสาธารณะ addOnePizza (อาร์เรย์ &$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();
  }


  
  ฟังก์ชั่นสาธารณะ 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();
  }

รหัสจาวาสคริปต์

(ฟังก์ชัน ($, Drupal) {
  Drupal.behaviors.myBehavior = {
    แนบ: ฟังก์ชัน (บริบท การตั้งค่า) {

     $('#edit-pizza-fieldset-general-actions-add-pizza',context).on('click',function (){
       console.log('สวัสดีชาวโลก!!!');
     })
      $('input').on('click',function (){
       console.log('สวัสดีชาวโลก!!!');
     })

    }

  }

})(jQuery, Drupal);

เนื่องจากฉันติดตามองค์ประกอบอินพุต ฟิลด์สร้างปุ่มจะต้องแสดง แต่สิ่งนี้จะไม่เกิดขึ้นป้อนคำอธิบายรูปภาพที่นี่ โปรดช่วยฉันเข้าใจว่าปัญหาคืออะไร ขอโทษสำหรับภาษาอังกฤษของฉัน ฉันใช้ google แปล

Kevin avatar
in flag
คุณรู้ได้อย่างไรว่ามีการแนบ JS
Павел Герасюта avatar
Js แนบมาอย่างแน่นอน ตรวจสอบแล้ว Console.log เริ่มทำงานเมื่อฉันเรียกใช้โดยใช้ตัวเลือกอินพุต $('input').on('click',function (){ console.log('สวัสดีชาวโลก!!!'); })
Павел Герасюта avatar
แต่จะใช้ได้เฉพาะกับปุ่มส่งแบบฟอร์มเท่านั้น $form['actions']['submit'] = [ '#type' => 'ส่ง', '#value' => $this->t('ส่ง'), ];
sonfd avatar
in flag
คำตอบที่ง่ายที่สุดคือตัวเลือกของคุณผิด คุณช่วยกรุณาเพิ่มมาร์กอัปที่แสดงผลจริงของแบบฟอร์มในคำถามได้ไหม เช่น. สิ่งที่คุณจะเห็นเมื่อคุณใช้ตัวตรวจสอบเบราว์เซอร์หรือดูแหล่งที่มาของหน้า
Павел Герасюта avatar
อัปเดตคำถามด้วยข้อมูลที่ถูกต้องมากขึ้น
No Sssweat avatar
ua flag
ฉันเดาว่า ajax ของคุณสร้างปุ่มขึ้นมาใหม่ ดังนั้น ID อาจเปลี่ยนเป็นบางอย่างเช่น `#edit-pizza-fieldset-general-actions-add-pizza-1` ลองกำหนดเป้าหมายโดยใช้ wrapper แทน `$('.pizza-fieldset-general-wrapper .form-submit').on('click',function (){`

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา