Drupal 7的模块自定义JavaScript AJAX的函数调用

问题描述:

我想如下图所示一些JavaScript功能添加到一个节点编辑表单复选框的集合:Drupal 7的模块自定义JavaScript AJAX的函数调用

enter image description here

勾选每个方块/选中,我想让我的AJAX代码做出回应。我尝试了一些AJAX功能附加到复选框看起来就像图像显示工作,但这里有两个问题:

  1. 我收到以下错误遗漏的类型错误:无法读取属性未定义的“应用” --- ajax.js

  2. 如果我取消了同一个盒子,并重新检查,我的AJAX代码不回应(我承认,可能是因为上述错误的)

下面的代码是我的模块代码在那里我加入sponsors.js加载代码:

function content_event_form_alter(&$form, &$form_state, $form_id){ 

    if($form_id == 'SPECIFIC-FORM-ID'){ 

     drupal_add_js(drupal_get_path('module', 'content_event') . '/js/sponsors.js', array('type'=>'file', 'scope'=>'header', 'group'=>'JS_THEME')); 

     drupal_add_js(array('content_event' => $form['field_exhibitor'][$form['field_sponsors']['#language']]['#default_value']), 'setting'); 

     /******************************/ 
     $form['field_exhibitor'][$form['#node']->language]['#ajax'] = array(
      'callback' => 'my_js', 
     ); 

    } 
} 

function my_js(){ 
    $commands[] = ajax_command_invoke('fieldset#node_event_major__form_group_sponsors div.form-type-checkbox', 'test');// . $element['country']['#id'], 'focus'); 
    return array('#type' => 'ajax', '#commands' => $commands); 
} 

my_js功能是从我试图打电话给测试功能在我的js代码我的AJAX回调函数。

这里是我的JavaScript代码:

(function ($) { 

    Drupal.behaviors.contentevent = { 
     attach: function (context) { 

      //DEFAULT - hide all sponsor checkboxes 
      $('fieldset#node_event_major__form_group_sponsors div.form-type-checkbox').hide(); 

      $items = Drupal.settings['content_event']; 
      $($items).each( 
       function($item){ 
        Drupal.behaviors.showSponsor($item); 
       } 
      ); //end each 

      Drupal.behaviors.test = function() { 
       console.log('Testing ... Testing!!!'); 
      }; 

     } 
    }; 

    Drupal.behaviors.showSponsor = function($index) { 
     console.log('Test function responding: ' + $index); 
     $('fieldset#node_event_major__form_group_sponsors div.form-type-checkbox input[value=' + Drupal.settings['content_event'][$index] +']').parent().show(); 
    }; 

})(jQuery); 

不知道我做错了这里。

我认为这个问题是ajax_command_invoke功能导致此: $('fieldset#node_event_major__form_group_sponsors div.form-type-checkbox').test();

test功能必须是外面的“Drupal.behaviors”范围或尝试将第二个参数更改为ajax_command_invoke为“Drupal.behaviors.test”,如果你想继续这种方式(没有测试)。

我建议选择第一种方法。