Drupal에서 양식을 만들려고합니다. 하나 이상의 요소를 양식에 추가 할 수 있습니다. 예를 들어, 페이지는 이벤트에 대한 데이터를 포함 할 수 있으며 이벤트에는 여러 날짜가있을 수 있습니다. 'add_another_btn'를 클릭 도착하면Drupal 한 번만 호출되는 AJAX 콜백
이/**
* Implements hook_form_alter().
*/
function addextra_form_alter(&$form, &$form_state) {
if ($form['#form_id'] == 'test_content_node_form') {
$form['elements_table'] = array(
'#theme' => 'table',
'#title' => 'Elements already added',
'#header' => array('Item', 'Remove'),
'#empty' => 'No elements',
'#prefix' => '<div id="elements-table">',
'#suffix' => '</div>',
);
$form['add_elements'] = array(
'#title' => 'Add another element',
'#type' => 'fieldset',
'#collapsible' => TRUE,
'#collapsed' => FALSE,
);
$form['add_elements']['add_content'] = array(
'#type' => 'textfield',
'#description' => t('Add an element to the table'),
'#title' => t('Add another item'),
'#size' => '12',
'#maxlength' => '60',
'#prefix' => '<div id="addextra_content">',
'#suffix' => '</div>',
);
$form['add_elements']['add_another_btn'] = array(
'#type' => 'button',
'#name' => 'add_another',
'#button_type' => 'submit',
'#executes_submit_callback' => FALSE,
'#value' => 'Add another',
'#ajax' => array(
'callback' => 'addextra_element_to_table',
),
);
}
}
, 그것은 아약스 콜백 'addextra_element_to_table를 실행합니다 : 그래서처럼 보이는 형태를 갖는다.
콜백이라고 :
function addextra_element_to_table(&$form, &$form_state) {
$form['elements_table']['#rows'][] = array($form_state['values']['add_content'], l('Remove Item', '#'));
drupal_add_js(drupal_get_path('module', 'addextra') . '/addextra.js');
return array(
'#type' => 'ajax',
'#commands' => array(
ajax_command_replace('#elements-table', render($form['elements_table'])),
),
);
}
라는 JS 파일은 입력 필드에 ''
(function ($) {
$('#edit-add-content').val('');
})(jQuery);
의 발을 대체 만이 콜백은 한 번 호출됩니다. 나는 행동이 호출되면 다시 첨부되어야하기 때문에 이것이라고 생각합니다. 내 무지를 유감스럽게 생각합니다 - 어떻게 달성해야할지 모르겠습니다. 누구든지 나를 도울 수 있습니까? 대단히 감사하겠습니다. 미리 감사드립니다.
나는 Drupal 전문가가 아니지만, 이미로드 된 HTML 페이지에 동일한 js 파일을 계속 추가하고 매번 $ (document) .onload() 이벤트를 호출 할 것을 기대하고 있습니까? 이상하게 보입니다. Ajax를 사용하여이를 달성하는 이유는 무엇입니까? (결국) 숨겨진 노드를 '복제'할 수 없습니까? – Stan
js를 제거 할 수 있지만 새 요소에 대한 대체 양식이 작동하지 않습니다.그것은 '#row'데이터를 추가하는 콜백에서 작업을 수행하지 않습니다. – Deshiknaves
drupal_add_js를 옮겼으며 예상대로 작동합니다. add_content에 새 값을 추가 할 때마다 테이블이 실행되고 바뀝니다. 그러나 그것은 '#rows'에 추가하지 않고 테이블에 다른 요소를 추가 한 다음 테이블을 바꾸는 대신 행을 새로운 값으로 바꾸는 것입니다. 어떤 생각이라도 크게 감사 할 것입니다. 이것을 달성 할 수있는 다른 방법이 있다는 것을 알고 있지만, 지금은이 방법을이 방법으로 달성하는 방법을 알아 내서 앞으로이 방법을 사용할 수 있습니다. – Deshiknaves