在 Drupal 7 中未调用 Javascript 函数,该函数曾经在 Drupal 6 中正常运行

2022-01-23 00:00:00 jquery javascript drupal-7

我正在将我的 Drupal 6 站点迁移到 Drupal 7.因此,我遇到了一些代码问题.在 Drupal 7 中调用带有 jquery 等的 javascript 是不同的,这是我读过的.这是我在 Drupal 6 中的页面图像.在更改下拉框时,它上面的表格会填充属于该列表的项目地位.这在 Drupal 6 中运行良好.但在 Drupal 7 中,我看到 这个 javascript 错误.

I am in the process of migrating my Drupal 6 site to Drupal 7. As a result i am facing some issues with the code. The calling of javascript laced with jquery etc is different in Drupal 7 is what i have read. This is the image of the page i had in Drupal 6. On change of the dropdown box, the table above it gets populated with projects belonging to that status. This works fine in Drupal 6. But in Drupal 7 i see this javascript error.

这是我的 php 文件中 Dropdown 的表单元素.

This is the form element for the Dropdown in my php file.

<? php
 $form['status_list'] = array(
'#type' => 'select',
'#title' => t('Freeway Project Statuses'),
'#options' => array(
  0 => t('-Select Status-'),
  1 => t('Draft'),
  2 => t('NotSpecified'),
  3 => t('Quote'),
  4 => t('Forecasted'),
  5 => t('InEvaluation'),
  6 => t('Cancelled'),
  7 => t('Booked'),
  8 => t('InProduction'),
  9 => t('Completed'),
  10 => t('Closed'),
 ),
 '#default_value' => array('0' => 'Select Status'),
 '#weight' => 0,
);

这就是 JavaScript我已经用 Drupal 7 的附加标签对其进行了修改

And this is the JavaScript I have modified it with the additional tags for Drupal 7

 (function$){ .. })(jQuery); . 

Drupal 6 中不需要这些标签.

These tags were not needed in Drupal 6.

      (function$){
    $(document).ready(function () {
     $("#edit-status-list").change(function() {
     var selectedStatus = $(this).find(":selected").text();
     var charExists = ((window.location.href).indexOf('?') >= 0) ? true : false;

    if(charExists){
    var split = (window.location.href).split('?');
    var loc = split[0];

      loc = loc+"?status="+selectedStatus;  
    self.location.href= loc;

    }

    else{
     var locf = window.location.href+"?status="+selectedStatus;   
     self.location.href= locf;

     }

     });

     $("#create-freeway-project").submit(function() {
      $(":submit", this).attr("disabled", "disabled");

     });

    $(".common_link_class").click(function() {
          //alert("Hello");

       var count = ($(this).data("clicks") || 0) + 1;
       $(this).data("clicks", count);


        if ($(this).data("clicks") >= 1) {

       }


       if ($(this).data("clicks") >= 2) {

         return false;
       }
     });


      $("#edit-analysis-code-one").change(function () {
        // Get the configs and split them.
        var cfgs = _get_configs("edit-custRef");
        var split_cfgs = cfgs.split('/');

        // Create some new configs and put it back into the configs  textfield.
        //var new_cfgs = $(this).val() +"/"+ cfgs[1];
        var new_cfgs = $("#edit-analysis-code-one option:selected").text() +"/"+ cfgs[1];

        $("#edit-custRef").val(new_cfgs);
      });

      $("#edit-analysis-code-two").change(function () {
        // Get the configs and split them.
        var cfgs = _get_configs("edit-custRef");
        var split_cfgs = cfgs.split('/');

        // Create some new configs and put it back into the configs textfield.
        //var new_cfgs = cfgs[0] +"/"+ $(this).val();
        var new_cfgs = cfgs[0] +"/"+ $("#edit-analysis-code-two option:selected").text()
        $("#edit-custRef").val(new_cfgs);
     });


   });

 })(jQuery); 


(function$){
function _get_configs(id) {

  return $("#"+ id).val();

}   
})(jQuery); 

#edit_status_list 是我们感兴趣的下拉菜单.

#edit_status_list is the dropdown of our interest.

希望您对在 Drupal 7 中正确调用 javascipt 需要做哪些额外更改提出建议

Would like to have your suggestions as to what additional change needs to be done for proper javascipt calling in Drupal 7

推荐答案

应该是

(function($) {

没有

(function$ {

你得到的是一个语法错误.第一个实例化一个函数,使其第一个参数可以通过其主体代码中的符号 $ 获得.函数在body之后调用:

What you've got is a syntax error. The first one instantiates a function such that its first argument will be available via the symbol $ in its body code. The function is invoked after the body:

  // ...
})(jQuery);

全局jQuery"对象作为参数传入.此设置可确保您的代码通过常见的$"符号访问正确的框架(即 jQuery),而不必担心$"的另一个外部绑定.

and the global "jQuery" object is passed in as the argument. This setup assures your code access to the correct framework (that is, to jQuery) via the common "$" symbol without having to worry about another external binding for "$".

相关文章