Як програмно запустити натискання кнопки подання форми з підтримкою AJAX?


25

Я намагаюся програмно (з jQuery) викликати натискання на кнопку з поведінкою AJAX у формі Drupal, але поки jQuery('#edit-submit').click()нічого не робить.

Реальною миші на цій кнопці працює , як передбачалося. Будь-які ідеї, як змусити це працювати?


Якщо це кнопка # редагувати-надсилати, чи можна не просто зробити $ ('form'). Submit ()?
cam8001

це теж не працювало для мене. Він або розміщує форму не AJAX способом, або нічого не робить, залежить від деяких налаштувань у конструкторі форм.
Даніель

Відповіді:


40

jQuery('#edit-submit').mousedown() - мабуть, велика різниця.


3
не працює для мене
ram4nd

Це рішення працювало на мене. Натискання на кнопку виконувало дзвінок ajax, але .click () або варіації, однак, .mousedown () не працює ідеально.
Ерік Гудвін

Я б уникнув використання селектора ідентифікаторів для елементів форми. Якщо форма буде відновлена ​​під час зворотного виклику AJAX, ідентифікатори всіх елементів зміняться, і ваш селектор jQuery більше не працюватиме.
Юрій Бабенко

Саме так сказав Ерік. Я хотів би знати, чому є різниця ... серйозно, це, здається, не має сенсу.
Джоннатан Елмор

@JohnathanElmore mousedown()- це лише "перша частина" click()події, яка завершується, коли mouseup()відбувається. Коли ви натискаєте на посилання, а потім випускаєте мишу за межі області посилання, click()вона зазвичай не звільняється, а посилання не виконується. Ймовірно, виклик Ajax заважає mouseup()звільнити, але це лише здогадка ...
pamatt

7

Насправді, не потрібно гадати.

Ви повинні використовувати поведінку Drupal

Drupal.behaviors.yourFunctionName = {
    attach:function (context, settings) {

       // Your code goes here....

    }
}

Це дасть вам доступ до властивостей ajax налаштувань,

Drupal.behaviors.yourFunctionName = {
    attach:function (context, settings) {

       console.log(settings.ajax);

    }
}

Залежно від вашої конфігурації, ви повинні побачити список запускаючих елементів із різними властивостями, такими як назва функції зворотного виклику, ідентифікатор селектора, а також ім'я запуску події.

Потім ви можете використовувати відповідну інформацію, щоб викликати вашу подію.

// $(selector).trigger(eventName);
// for example...
$('#edit-product-id-15', context ).trigger('change');

2
Мені подобається ця відповідь, оскільки вона пропонує цікаву техніку, щоб дізнатися, як взаємодіяти з створеними елементами для не-Drupal розробників інтерфейсів, які, можливо, працюють над проектом Drupal. +1
Лестер Пібоді

6

Створіть подачу ajax, як описано нижче.

 $form['button'] = array(
    '#type' => 'button',
    '#value' => 'Click',
    '#ajax' => array(
      'callback' => '_kf_reading_user_points',
      'wrapper' => 'reading-user-points',
      'method' => 'replace',
      'event' => 'click',
    ),
  );

function _kf_reading_user_points(&$form, &$form_state) {
  // Something within the callback function.
}

Тоді подією jquery .click () буде робота у формі drupal ajax.


Чи можете ви також розмістити зразкову функцію зворотного виклику, коли я намагався, функція зворотного виклику не збирається
Crazyrubixfan

1
Додана функція зворотного дзвінка :)
Leopathu


3

У моєму випадку вищеназвані рекомендовані рішення не спрацювали для мене, але згадка про .mousedown () призвела до наступної ідеї, яка працювала на мене (Drupal 7):

$('#custom-submit-button').click(function() {
  $('#ajax-submit-button').trigger('mousedown');
});

Тут є корисна довідкова інформація про те, "чому". Це так у Посиланні API форми під #ajax_prevent


Мені не потрібна обгортка click (), але це посилання на запобігання ajax було KEY!
Райан Хартман

2

Дивлячись на модуль Better Exposed Filters, вони надсилають форму AJAX, знаходячи $ (. Ctools-auto-submit-click ') і запускаючи клацання.

<?php
// ... near line 190 of better_exposed_filters.js

// Click the auto submit button.
$(this).parents('form').find('.ctools-auto-submit-click').click();
?>

подія клацання працювала для мене, тоді як подія в мусе-сіті не відбулася.
aross

0

Ви повинні запустити submitподію у формі. Clickа mousedownподії на кнопках не працюють.


Це те, що я спробував спочатку, і, здається, не працює правильно. Ось як я потрапив сюди.
aross
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.