【问题标题】:How to reload the custom JavaScript file after Drupal makes ajax call?Drupal 进行 ajax 调用后如何重新加载自定义 JavaScript 文件?
【发布时间】:2010-07-28 20:15:31
【问题描述】:

如何在 Ajax 调用完成后重新加载自定义 JavaScript 文件?

在我的例子中,我有一个自定义 JavaScript 文件来操作视图数据和 过滤器。它在第一次加载页面时完美运行。

但是一旦用户设置过滤器并点击应用,即在 Ajax 调用之后,JavaScript 似乎停止工作。它在那里,但没有注册任何事件。

我在 Drupal.org 上阅读了一些文章,但这并没有给我一个可靠的解决方案。

注意 - 它不是模块 .js 文件,而是主题文件夹下的自定义独立 .js 文件。

【问题讨论】:

    标签: javascript ajax drupal


    【解决方案1】:

    您应该阅读JavaScript in Drupal,尤其是any part about Drupal.bahaviors

    重点是您需要将自定义 JavaScript 文件转换为 Drupal.behaviors,因为它们会重新附加到通过 AJAX 调用动态加载的内容。

    【讨论】:

      【解决方案2】:

      问题可能是 - “我怎样才能触发一个更新了双重回调参数的 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

      【讨论】:

        【解决方案3】:

        要添加脚本,您需要使用 document.createElement("script") 您不能只设置 innerHTML。请参阅 http://www.phpied.com/javascript-include-ready-onload/ 了解处理单独浏览器的一个很好的示例。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多