Как затригерить Ajax callback элемента формы?

Главные вкладки

Аватар пользователя veligursky veligursky 19 ноября 2020 в 2:45

Здравстуйте, нужна помощь:
есть форма со списком, у списка есть колбек который отрабатывает на событие change при выборе элемента списка(это работает как надо).

<?php 
 $form
['list'] = array(
    
'#type' => 'select',
    
'#options' => $list_items,
    
'#default_value' => $current_id,
    
'#attributes' => array('class' => array('js-select')),
    
'#ajax' => array(
     
'wrapper' => "wrapper_id",
     
'event' => "change",
      
'callback' => "my_form_ajax_callback",
    ),
  );
?>

Нужно чтобы это же действие отработало при клику по нужному Div

Drupal.behaviors.selectChanged = {
attach: function(context, settings) {
console.log(settings.ajax);

        $('.mydiv', context).mousedown(function(){

        $('#select_id', context).val('10').trigger('change');

      });
  }
};

Джквери код при клике на див селект меняет, но вот функция колбека не отрабатывает/не подхватывается.
Что еще надо дописать чтобы работало и для клика по диву?
Помогите пожалуйста.

Лучший ответ

Аватар пользователя veligursky veligursky 19 ноября 2020 в 16:14

$('#select_id').val('10').trigger('change'); - отрабатывает и запускает колбек

Можно закрывать, проблема оказалась в совсем другом, в jquery.js добавленном к верстке и отключенном jquery_update.
Спасибо за помощь.

Комментарии

Аватар пользователя veligursky veligursky 19 ноября 2020 в 14:30

adano wrote:
https://www.drupal.org/docs/7/api/javascript-api/simple-drupal-ajax-load...
P.S. А лучше полностью задачу распишите, т.к. скорее всего, можно и без скрипта обойтись...

По клику на элементе(див, ссылка и т.д.) нужно изменить выбранное значение в селекте ($('#select_id', context).val('10').trigger('change')) и заставить отработать 'callback' => "my_form_ajax_callback" .
Значение как я написал выше - меняется, а вот сам колбек на "change" не отрабатывает.

Если же выбрать значение в самом селекте - то он работает как и должно(аякс апи друпала).

Вот и ломаю уже сутки голову почему не отрабатывает по событию и как его заставить работать.

Аватар пользователя veligursky veligursky 19 ноября 2020 в 14:43

adano wrote: можно и без скрипта обойтись...

через state не получится, элементы по которым будут кликать не являются частью формы

Аватар пользователя veligursky veligursky 19 ноября 2020 в 15:13

adano wrote:
Так что ли надо?

$('.mydiv', context).click(function() {
  $('#select_id').val('10').trigger('change');
});

этот код только установит значение но не отправит форму. И форма состоит из одного только селекта.

Вопрос как засабмитить такую форму?

Аватар пользователя adano adano 19 ноября 2020 в 15:19

этот код только установит значение но не отправит форму

Ну значит на сабмит должен быть функционал...
Говорю же, распишите полностью задачу... И что у вас в my_form_ajax_callback...

Аватар пользователя veligursky veligursky 19 ноября 2020 в 15:34

adano wrote:
этот код только установит значение но не отправит форму
Ну значит на сабмит должен быть функционал...
Говорю же, распишите полностью задачу... И что у вас в my_form_ajax_callback...

в этой форме сабмита нет, за него тут событие change
если я напрямую в селекте выбираю значение - то колбек отрабатывает и часть хтмл разметки заменяется разметкой которую возвращает колбек
И мне нужно сделать тоже самое только уже по клику и через джс.
Тоесть код $('#select_id').val('10').trigger('change'); выбирает нужное мне значение и устанавливает его в селекте только вот само событие не запускает отработку колбека который привязан к этому селекту.

Аватар пользователя veligursky veligursky 19 ноября 2020 в 16:14

$('#select_id').val('10').trigger('change'); - отрабатывает и запускает колбек

Можно закрывать, проблема оказалась в совсем другом, в jquery.js добавленном к верстке и отключенном jquery_update.
Спасибо за помощь.