В седьмом друпале есть фантомный баг с 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
Добавить комментарий