У меня есть базовый ввод с помощью кнопки FAPI, который #ajax включен, и он работает нормально, но я хочу добавить JS "Вы уверены?" всплывающее окно с подтверждением при нажатии кнопки до того, как код действительно запустится, и я не уверен, как это сделать, потому что JS FAPI, кажется, съедает щелчок до того, как я могу получить его независимо от того, что я делаю.
Я попытался добавить встроенный обработчик onclick, вот так:
$form['search_filters']['channels']['channel_delete_' . $channel->nid] = array(
'#type' => 'button',
'#name' => 'channel_delete_' . $channel->nid,
'#value' => 'Delete',
'#attributes' => array(
'class' => array('confirm'),
'onclick' => "return confirm('Are you sure you want to delete that?')"
),
'#button_type' => 'no-submit',
'#ajax' => array(
'callback' => 'delete_channel_callback',
'wrapper' => 'channel_container_' . $channel->nid
),
);
... что не помогает, и я также попытался добавить:
$('.confirm').click(function(e) {
e.preventDefault();
alert('Is this recognized')? // never runs
});
в моем модуле JS, который также игнорируется.
Есть еще идеи? Есть ли способ добавить обработчик отправки в начало стека, который распознает Drupal #ajax?
источник
$('.confirm').unbind('click');
) ... или я читаю это неправильно? извините, не знаком сunbind
подтверждая, что Jeroen исправляет код googletorp.
Тем не менее, я сам обнаружил, что вечера типа "mousedown" должны быть снова распакованы и переплетены. Итак, фрагмент кода, который работал для меня, выглядит следующим образом:
источник
Вопрос старый, но меня это тоже заинтересовало. На мой взгляд, самый простой способ - использовать событие click в вашем определении Ajax, потому что Drupal по умолчанию использует событие mousedown:
Затем вам просто нужно добавить
.mousedown()
событие к вашей кнопке в вашем файле Javascript, потому что оно запускается до события click:Если вы все еще хотите, чтобы ваш Ajax Request вызывался с событием mousedown, вы можете использовать пользовательское событие:
Затем вы можете запустить это событие в
.mousedown()
случае вашего файла Javascript:Обе версии работают!
источник
preventDefault
в своем обработчике кликов, чтобы предотвратить нормальную (не js) отправку формы.Вы пытались запустить JS внутри Drupal? Может случиться так, что ваш обработчик кликов подключается после Drupal.
В любом случае вы должны иметь возможность отсоединить обработчик кликов Drupal на кнопке, чтобы вы вызывались первыми, и вы можете вызывать обработчик кликов Ajax Drupal вручную (и условно).
источник
Отвечая на заметку, код googletorp не на 100% правильный.
Вам нужно изменить строку, где хранятся события, следующим образом:
Таким образом вы устраняете любые проблемы со ссылками на объекты, поэтому при отмене привязки событий click она также не отменяется в вашей переменной;)
Также имейте в виду, что начиная с версии jQuery 1.8 метод .data () устарел. Получение данных о событиях теперь осуществляется через внутреннюю структуру данных:
Источник: http://blog.jquery.com/2011/11/08/building-a-slimmer-jquery/
источник
Я нашел много полезных ответов выше и смог заставить мою форму работать. Собрав все это вместе, это то, что сработало для моего приложения: кнопка удаления формы с диалоговым окном подтверждения и обратным вызовом AJAX для изменения содержимого списка выбора.
Javascript:
Элемент формы (выберите список), который нужно изменить:
Кнопка:
И, наконец, обратный вызов AJAX:
источник
Я исправил это, изменив файл drupal misc / ajax.jx.
Создайте копию файла ajax.js, поместите его в любой пользовательский модуль и
Drupal.ajax = function (base, element, element_settings) {
измените функцию в beforeSend:Это работает нормально для меня.
источник
Может быть, немного стар, но мне интересно, почему мы не можем просто использовать:
источник