Как перезагрузить пользовательский файл JavaScript после того, как Drupal делает вызов ajax? - PullRequest
4 голосов
/ 29 июля 2010

Как можно перезагрузить пользовательский файл JavaScript после завершения вызова Ajax?

В моем случае у меня есть собственный файл JavaScript для управления данными представлений и фильтры. Он отлично работает при первой загрузке страницы.

Но как только пользователь устанавливает фильтр и нажимает Apply, т.е. после вызова Ajax, JavaScript перестает работать. Он там есть, но не регистрирует событие.

Я прочитал несколько статей на Drupal.org, но это не дало мне твердого решения.

Примечание. Это не файл модуля .js, а отдельный автономный файл .js в папке темы.

Ответы [ 3 ]

3 голосов
/ 29 июля 2010

Вы должны прочитать JavaScript в Drupal , особенно любую часть о Drupal.bahaviors.

Суть в том, что вам нужно превратить ваш пользовательский файл JavaScript в Drupal.behaviors, потому что они будут присоединены к контенту, динамически загружаемому через вызовы, подобные AJAX.

1 голос
/ 16 октября 2013

вопрос может быть - "как я могу запустить функцию js с обновленными параметрами повторного обратного вызова"

это то, что я сделал:

моя форма выглядит так:

$form['letterdrop_id'] = array(                       
    '#type' => 'select',                              
    '#title' => 'Letterdrops',                        
    '#options' => $letterdrops,                       
    '#prefix' => '<div id="replace_div_ld">',         
    '#suffix' => '</div>',                            
    '#ajax' => array(                                 
      'callback' => 'agc_ems_form_map_change',        
      ),                                              
    );                                                

с этой функцией обратного вызова:

function agc_ems_form_map_change($form, &$fstate) {              
   return array(                                                 
    '#type' => 'ajax',                                           
    '#commands' => array(
      // this command is to reload a form element                                        
      ajax_command_replace("#agc_map", render($form['map'])),    
      // this command does the business and calls my custom function, 
      // with a parameter object supplied
      array('command' => 'afterAjaxCallbackExample',             
          'selectedValue' => 'i am not a fish',                  
    )                                                            
  ));                                                            
}                                                                

это моя функция js

(function($, Drupal) {                                                      
  // put function into drupal commands:   
  Drupal.ajax.prototype.commands.afterAjaxCallbackExample = 
     function(ajax, response, status) {
    // response object as passed in our Ajax callback          
    // do what you want in here
    alert(response.selectedValue);                                          
  };                                                                        
}(jQuery, Drupal));      

100% кредит jaypan

0 голосов
/ 29 июля 2010

Чтобы добавить скрипт, вам нужно использовать document.createElement («скрипт»), который вы не можете просто установить innerHTML.см. http://www.phpied.com/javascript-include-ready-onload/ для хорошего примера, который имеет дело с отдельными браузерами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...