How to Increment or Decrement number of fields dynamically using Ajax Form API ?
In this example, we will use a field to get tags list, the number of tags dynamic.
1. Create a custom form (See the tutorial)
2. Add tags field
$form['tags'] = [
'#type' => 'details',
'#title' => "Tags",
'#open' => TRUE,
'#description' => "The description of the field.",
];
$form['tags']['addtag'] = [
'#type' => 'submit',
'#value' => t('Add one more'),
'#submit' => ['::addOneTag'],
'#weight' => 100,
'#ajax' => [
'callback' => '::updateTagCallback',
'wrapper' => 'tagfields-wrapper',
'method' => 'replace',
],
];
$form['tags']['remtag'] = [
'#type' => 'submit',
'#value' => t('Remove the last'),
'#submit' => ['::remOneTag'],
'#weight' => 100,
'#ajax' => [
'callback' => '::updateTagCallback',
'wrapper' => 'tagfields-wrapper',
'method' => 'replace',
],
];
$form['tags']['tag_values'] = [
'#type' => 'container',
'#tree' => TRUE,
'#prefix' => '<div id="tagfields-wrapper">',
'#suffix' => '</div>',
];
$number_of_tags = $form_state->get('number_of_tags');
if (empty($number_of_tags)) {
$number_of_tags = 1;
$form_state->set('number_of_tags', $number_of_tags);
}
for ($i = 0; $i < $number_of_tags; $i++) {
$form['tags']['tag_values'][$i] = [
'#type' => 'entity_autocomplete',
'#target_type' => 'taxonomy_term',
];
}
3. Add Callback methods:
/**
* Increment number of tags.
*/
public function addOneTag(array &$form, FormStateInterface $form_state) {
$number_of_tags = $form_state->get('number_of_tags');
$form_state->set('number_of_tags', $number_of_tags + 1);
$form_state->setRebuild(TRUE);
}
/**
* Decrement number of tags.
*/
public function remOneTag(array &$form, FormStateInterface $form_state) {
$number_of_tags = $form_state->get('number_of_tags');
$form_state->set('number_of_tags', $number_of_tags - 1);
$form_state->setRebuild(TRUE);
}
/**
* Return the tag list (Form)
*/
public function updateTagCallback(array &$form, FormStateInterface $form_state) {
return $form['tags']['tag_values'];
}
Now you can add or remove tag fields dynamically
Comments2
RE:
In view of the "Add-more button" case accessible in Drupal examples module I have made a shape that can include fields progressively utilizing AJAX, and now I need to add a different Remove catch to every one of those fields so I can evacuate singular fields. Custom Essay Writing Service
post
These are incredible drills and sources which has some genuine good amount of things I have been being asked the several times about many different things which are genuinely a good thing to see like this as do my essay for me have helped me by being here.