Drupal → Чиним onclick на ajax кнопках

10.01.2017

В седьмом друпале есть фантомный баг с ajax кнопками — если попытаться навесить на такую кнопку onclick, то клик не сработает, так как после события mousedown кнопка дизаблится и последующие события не вызываются. Фантомный он потому, что если ответ от сервера придёт очень быстро (например на локальном компьютере где пинг нулевой), то onclick таки выполнится.

Пример проблемного кода:

$form['submit'] = array(
  '#type' => 'submit',
  '#value' => 'Submit',
  '#ajax' => array(
    'wrapper' => '...',
    'callback' => '...',
  ),
  '#attributes' => array(
    'onclick' => 'alert();',
  ),
);

Алерт скорее всего вы не увидите, даже если навесите его из js.

Решения два. Первое — дёргать ajax по клику, а не по mousedown, как это делается по умолчанию:

$form['submit'] = array(
  '#type' => 'submit',
  '#value' => 'Submit',
  '#ajax' => array(
    'wrapper' => '...',
    'callback' => '...',
    'event' => 'click', // <-- NEW
  ),
  '#attributes' => array(
    'onclick' => 'alert();',
  ),
);

Второе — вместо onclick использовать onmousedown:

$form['submit'] = array(
  '#type' => 'submit',
  '#value' => 'Submit',
  '#ajax' => array(
    'wrapper' => '...',
    'callback' => '...',
  ),
  '#attributes' => array(
    'onmousedown' => 'alert();', // <-- CHANGED
  ),
);
Написанное актуально для
Drupal 7
Похожие записи

Добавить комментарий