xandeadx.ru Блог музицирующего веб-девелопера

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
  ),
);
Написанное актуально для Drupal 7
Похожие записи

Комментарии RSS

Я немного не по теме, но не знаю куда именно написать!
У меня такая проблема с ajax окнами - они бесконечно загружаются! Я нажимаю на кнопку (ajax login-register, например), появляется окно и идет загрузка (значок). Загрузка длится вечно.
В чем может быть трабла?

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

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании