2016-05-18 9 views
1

選択したオプションに従ってテキストエリアのメッセージを更新したいのですが、どうすればいいのでしょうか?drupal ajaxでフィールドを追加してリストを選択

選択リスト:オプションでfield_level_list:チケットレベル1 /チケットレベル2 /チケットレベル3

これはフックform_alterある:

function custom_support_form_support_ticket_node_form_alter(&$form, &$form_state, $form_id) 
{ 
    $form['field_level_list']['und']['#ajax'] = [ 
     'event' => 'change', 
     'callback' => 'custom_support_ticket_ajax_form_callback', 
     'wrapper' => 'level_message', 
     'effect' => 'slide' 
    ]; 

    $form['field_level_list']['und']['#weight'] = -2; 
    $form['field_level_list']['und']['#suffix'] = '<div id="level_message"></div>'; 
} 

これは、コールバック関数である:

function custom_support_ticket_ajax_form_callback($args) 
{ 
    $cas = $args['field_level_list']['und']['#value']; 

    switch($cas){ 
     case 1: 
      $message = t('Ticket 1'); 
      break; 
     case 2: 
      $message = t('Ticket 2'); 
      break; 
     case 3: 
      $message = t('Ticket 3'); 
      break; 
     default : 
      $message = 'X'; 
    } 

    $form['level_message']['level_textarea'] = [ 
     '#type' => 'textarea', 
     '#title' => 'message', 
     '#value' => $message, 
     '#weight' => -9, 
    ]; 

    $form['level_message']['level_submit'] = [ 
     '#type' => 'submit', 
     '#value' => 'Send', 
     '#ajax' => [ 
      'event' => 'click', 
      'callback' => 'custom_support_sendMessage_callback' 
     ], 
     '#weight' => -8 
    ]; 


    return ajax_command_replace('#level_message', $form['level_message']);} 

それは動作しますが、私はいつも同じメッセージ($メッセージ)を受け取ります。 「チケットレベル1」を最初にクリックすると、テキストエリアに「チケット1」が表示されますが、「チケットレベル2」に変更すると「チケット2」というメッセージは表示されません。

答えて

0

私はそれが最善の方法ではないと思うが、それは働いています:

$form['#prefix'] = '<div id="level_message">'; 
$form['#suffix'] = '</div>'; 
関連する問題