2017-01-02 31 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();