2013-04-11 4 views
0

У меня есть пользовательский модуль формы в Drupal 7. Код выглядит следующим образомDrupal 7 Ajax формы - выберите элемент

function form_example_dynamic_form($form, &$form_state) { 

$form['tables'] = array(

      '#type' => 'select', 
      '#options' => drupal_map_assoc(array("2012", "2013")), 
      '#title' => t('Select year:'), 

      '#ajax' => array(
       'callback' => 'form_example_dynamic_myajax', 
       'wrapper' => 'abcd', 
       'effect' => 'fade', 
       'method' => 'replace', 
       ), 

      ); 

return $form; 
} 

function form_example_dynamic_myajax($form, $form_state) { 
    return $form_state['values']['tables']; 
} 

Так этот простой код должен обновить #abcd тег со значением из «таблиц ' Выбрать. И проблема в том, что он работает только для первого выбора. Если я выбрал 2013, он вернет текст «2013» в теге #abcd. Но, когда я выбрал 2012, тэг #abcd остается неизменным. Он по-прежнему apperas 2013.

Вот пример: http://kuzaj.yamandi.com/pl/form_example_dynamic

Кто-нибудь имеет какие-либо идеи, как решить эту проблему?

ответ

0

Таким образом, атрибут 'method' => 'replace' ЗАМЕНЯЕТ всю оболочку в новый текст. Пример:

Там не например ДИВ:

Первый выбор (например, 2013) меняет его (обратите внимание, что больше не является #abcd тег):

Затем снова если элемент формы изменен, он ищет тег #abcd, но нет ничего подобного, потому что он уже заменен на «2013». Поэтому вместо использования метода «replace» он должен быть «html». Метод Html заменяет содержимое тега, но тег остается «нетронутым».

Смежные вопросы