отключение перезагрузки страницы при нажатии клавиши ввода в текстовом поле формы в drupal 6.x - PullRequest
0 голосов
/ 13 февраля 2012

У меня есть форма, содержащая только одно текстовое поле, и ожидаемое поведение таково, что когда пользователь нажимает клавишу ввода, находясь в текстовом поле, значение текстового поля должно быть отправлено, но без повторной загрузки (обновления) загрузки. Я пробовал различные способы настройки AHAH, но все еще не смог достичь ожидаемого поведения, страница перезагружается. Я безуспешно искал решение этой проблемы.

Пожалуйста, посоветуйте, как это сделать, или направьте меня куда-нибудь полезное Вот код:

function user_porfile_message_form(){
  $form = array();

  $form['element1'] = array(
    '#type' => 'textfield',
    '#title' => '',
    '#default_value' => '',
  );

    $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save'),
    '#attributes' => array('class' => 'no-js'),
    '#ahah' => array(
      'path' => 'module/file/callback',
      'wrapper' => 'some-wrapper',
      'event' => 'click', 
    ),
  );
    return $form;
}

1 Ответ

0 голосов
/ 14 февраля 2012

Есть решение, вот оно:

function some_form(&$form_state){
  $form = array();
        $form['text'] = array(
            '#value' => "Text",
            '#prefix' => '<div id="some-wrapper">',
            '#suffix' => '</div>',
        );

    $form['text_input'] = array(
    '#type' => 'textfield',
    '#title' => '',
    '#default_value' => '',
  );

    $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save'),
        '#attributes' => array('class' => 'no-js'),
    '#ahah' => array(
      'path' => 'module/file/callback',
      'wrapper' => 'some-wrapper',
      'event' => 'click', 
    ),
  );
    return $form;
}

function some_form_submit(){
//Do whatever has to be done for submission
}

function some_form_callback(){
    $form_state = array('storage' => NULL, 'submitted' => FALSE);

    $form_build_id = $_POST['form_build_id'];
  $form = form_get_cache($form_build_id, $form_state);
  $args = $form['#parameters'];
  $form_id = array_shift($args);
  $form_state['post'] = $form['#post'] = $_POST;

  $form['#programmed'] = $form['#redirect'] = FALSE;
  drupal_process_form($form_id, $form, $form_state);
    $form = drupal_rebuild_form($form_id, $form_state, $args, $form_build_id);

    $changed_elements = $form['text'];

    unset($changed_elements['#prefix'], $changed_elements['#suffix']);
    drupal_json(array(
        'status'   => TRUE,
        'data'     => drupal_render($changed_elements),));
}

/**
 * Implement hook_menu().
 */
function module_menu(){
  $items['module/file/callback'] = array(
    'page callback' => 'some_form_callback',
    'access callback' => TRUE,
    'file' => 'module.module',
    'type' => MENU_CALLBACK,
  );
   return $items;
}
...