Drupal → Чиним onclick на ajax кнопках
В седьмом друпале есть фантомный баг с 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 ), );
Оставить комментарий