0
votes

I'm trying to use ajax in drupal 8 custom form. But it not work.

I've custom form, in which textfield is display with some value once the user click on the checkbox. Here is my code:-

public function buildForm(array $form, FormStateInterface $form_state) {

$form['del_name'] = array(
    '#type' => 'checkbox',
    '#title' => $this->t('Delete users, by name'),
        '#ajax' => array(
      'callback' => array($this, 'my_user_callback'),
            'wrapper' => 'del-name',
        ),
  );

    $form['name_placeholder'] = array(
    '#type' => 'hidden',
    '#prefix' => '<div id="del-name">',
    '#suffix' => '</div>',
    '#tree' => TRUE,
  );

    if (!empty($form_state->getValue('del_name')) && $form_state->getValue('del_name')) {
   /*
   * $process_data = some stuff
   */   
     $form['name_placeholder']['user_role'] = array(
      '#title' => $this->t('Users role'),
      '#type' => 'textfield',
      '#default_value' => $process_data
    ); 
  }
}

function my_user_callback(array &$form, FormStateInterface $form_state) {
      return array(
       '#type' => 'ajax',
       '#commands' => array(
        ajax_command_replace('#del-name', render($form['name_placeholder'])),
        )
      );
  }

Problem is that, textfield not appear when checkbox is checked.

1
what is the problem? - Ronnie
Is anyone have some suggestion? - Rahul Seth

1 Answers

1
votes

try this:

use Drupal\Core\Ajax\AjaxResponse;
use Drupal\Core\Ajax\HtmlCommand;

function my_user_callback(array &$form, FormStateInterface $form_state {
  $response = new AjaxResponse();
  $response->addCommand(new HtmlCommand(
    '#wrapper-element-id',
    $array_of_form_elements
  ));
  return $response;
);