Рейтинг:0

Обратный вызов AJAX не запускается в hook_form_alter()

флаг br

В Drupal 7 клиент хочет добавить кнопку в user_profile_form. Поэтому в своем пользовательском модуле я создаю кнопку и сопутствующий ей обратный вызов. Но хотя кнопка появляется в форме, я не вижу доказательств того, что обратный вызов запускается.

функция member_form_alter(&$form, &$form_state, $form_id) {
  если ($form_id == "user_profile_form") {
     
  $ форма ['send_reset'] = массив (
          '#type' => 'кнопка',
          '#prefix' => "<div id='reset-div'>",
          '#суффикс' => "</div>",
          '#value' => "Сбросить участника",
          '#ajax' => [
            'обратный вызов' => 'member_reset_user',
            'обертка' => 'сброс-div',
            'event' => 'отправить', //клик и т. д.
          ],
          '#вес' => -150,
          '#атрибуты' => массив(
            'id' => массив ("сброс-отмена")
          ),
        );
}
функция member_reset_user ($ form, & $ form_state) {
  умереть();  
  пытаться {
    моя_пользовательская_функция():
    watchdog('участник', 'сброс пользователя', WATCHDOG_NOTICE);
  }
  поймать (исключение $e) {
    watchdog('участник', 'сброс не выполнен', WATCHDOG_ERROR);
  }
  вернуть $ форму;
}

HTML-код, сгенерированный Drupal, предлагает функцию отправки.

  <div id="reset-div"><input id="reset-cancel" type="submit" name="op" value="Reset member" class="form-submit"></div>

Поскольку я не создаю новые элементы формы в своем обратном вызове, а просто запускаю пользовательскую функцию, я не вижу, что делаю неправильно. Я слишком долго смотрел на это.

apaderno avatar
флаг us
Я полагаю, что обратный вызов AJAX не вызывается, как и когда вы ожидаете. Что вы сделали, чтобы убедиться, что обратный вызов вызывается?
apaderno avatar
флаг us
(В этом коде есть опечатка, и блок кода находится не там, где должен быть. Это не причины, по которым обратный вызов не должен вызываться, но показанный код — это не то, что вы на самом деле используете, наверное.)
apaderno avatar
флаг us
Чтобы было понятно, поскольку событие AJAX не установлено для этой кнопки, по умолчанию используется *mousedown*. Обратный вызов AJAX вызывается только для этого события JavaScript.
флаг br
@apaderno Спасибо за ответ. В первой строке обратного вызова есть die(), чтобы быть уверенным. Пересматриваю ляп выше. Событие AJAX сначала меня сбило с толку, но я просмотрел и добавил событие для клика, отправки. Все еще не срабатывает.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.