2017-01-02 108 views
1

我正在用多个启用ajax的表单元素构建drupal表单。Drupal 8在ajax回调后添加ajax表单元素

我有一个选择列表,在更改后执行ajax回调。问题是它向页面添加了一个新的选择列表,该列表也启用了ajax。这似乎不起作用,这对我来说似乎合乎逻辑,因为ajax实际上是捆绑在一个添加到页面中的,所以它在replacecommand中丢失了。

有没有人经历过这个,有没有人有解决方案?

这是我的代码

/** 
    * {@inheritdoc} 
    */ 
    public function buildForm(array $form, FormStateInterface $form_state) 
    { 
     $form['city'] = [ 
      '#type' => 'select', 
      '#title' => $this->t('Station'), 
      '#description' => $this->t('City'), 
      '#options' => array(
       'Aalst' => $this->t('Aalst'), 
       'Brussel' => $this->t('Brussel'), 
       'Hasselt' => $this->t('Hasselt'), 
       'Leuven' => $this->t('Leuven'), 
      ), 
      '#ajax' => [ 
       'callback' => array($this, 'extendFormAjax'), 
       'event' => 'change', 
       'progress' => array(
        'type' => 'throbber', 
        'message' => t('Choose City'), 
       ), 
      ], 
      '#suffix' => '<div id="extended-form"></div>', 
     ]; 

     $form['submit'] = [ 
      '#type' => 'submit', 
      '#value' => t('Submit'), 
     ]; 

     return $form; 
    } 

    /** 
    * Ajax callback to validate the email field. 
    */ 
    public function extendFormAjax(array &$form, FormStateInterface $form_state) 
    { 
     $parking = [ 
      '#type' => 'select', 
      '#title' => $this->t('Parking'), 
      '#description' => $this->t('Parking'), 
      '#options' => [ 
       'P1' => $this->t('P1'), 
       'P2' => $this->t('P2'), 
      ], 
      '#ajax' => [ 
       'callback' => array($this, 'extendFormAjax'), 
       'event' => 'change', 
       'progress' => array(
        'type' => 'throbber', 
        'message' => t('Choose parking'), 
       ), 
      ], 
     ]; 

     $response = new AjaxResponse(); 
     $response->addCommand(new InsertCommand('#extended-form', $parking)); 

     return $response; 
    } 
+0

我遇到了同样的问题,但我还没有找到解决方案。 –

回答

1

尝试调用某个地方在JS Drupal.attachBehaviors();