2014-05-18 46 views
2

我有一些JS代碼,但Drupal 7無法識別它。我得到以下錯誤:

TypeError: $ is not a function 

任何人都可以幫助我使這個腳本工作?我正在使用jQuery v1.4.4。

<script type="text/javascript"> 
this.screenshotPreview = function(){  
/* CONFIG */ 

    xOffset = 10; 
    yOffset = 30; 

    // these 2 variable determine popup's distance from the cursor 
    // you might want to adjust to get the right result 

/* END CONFIG */ 
$("a.screenshot").hover(function(e){ 
    this.t = this.title; 
    // this.title = "";  
    var c = (this.t != "") ? "<br/>" + this.t : ""; 
    $("body").append("<p id='screenshot'><img src='"+ this.rel +"' alt='url preview' />"+ c +"</p>");         
    $("#screenshot") 
     .css("top",(e.pageY - xOffset) + "px") 
     .css("left",(e.pageX + yOffset) + "px") 
     .fadeIn("fast");       
}, 
function(){ 
    this.title = this.t;  
    $("#screenshot").remove(); 
}); 
$("a.screenshot").mousemove(function(e){ 
    $("#screenshot") 
     .css("top",(e.pageY - xOffset) + "px") 
     .css("left",(e.pageX + yOffset) + "px"); 
});   
}; 


// starting the script on page load 
$(document).ready(function(){ 
screenshotPreview('some text'); 
}); 
</script> 
+0

您必須在您的腳本之前包含jQuery。 –

+0

jQuery包含在頭部腳本的頂部 – progryse

+1

對於應該處理元素的代碼,您可能需要使用Drupal.behaviors。有關一些解釋,請參閱http://pbuyle.github.io/blog/2013/11/18/javascript-jquery-domready-drupal-7/。 –

回答

7

嘗試將「$」快捷方式的所有實例更改爲「jQuery」,它應該可以工作。調用screenshotPreview功能將例如則是這樣的:

// starting the script on page load 
jQuery(document).ready(function(){ 
screenshotPreview('some text'); 
}); 

或者附上所有jQuery代碼中使用jQuery的函數作爲參數和$快捷方式,然後應該工作。

// We define a function that takes one parameter named $. 
(function ($) { 
    // Use jQuery with the shortcut: 
    console.log($.browser); 
// Here we immediately call the function with jQuery as the parameter. 
}(jQuery)); 

(來源:https://drupal.org/node/171213

+0

這在jQuery自己的文檔中也有很好的解釋,在專門編寫插件的章節中:http://learn.jquery.com/plugins/basic-plugin-creation。 –

3

Drupal 7的提供的jQuery在no-conflict mode,這意味着$不是jQuery物體/命名空間。這應該不是一個問題,正確編寫的jQuery插件遵循jQuery's plugins authoring documentation

期望$成爲jQuery名稱空間的JavaScript代碼在Drupal頁面中不起作用。

(function($) { 
    // Here $ is the jQuery namespace. 
})(jQuery); 
2

試試這個:這可以通過包裝在一個立即調用匿名函數的代碼,將別名jQuery的命名空間$迎刃而解(或讓我知道這是不對的 - 但它似乎對工作我)

/******************************************************************* 
*     :: Define Your Functions :: 
*******************************************************************/ 

(function ($) { 
    removeAjaxLoader = function() { 
     console.log('removeAjaxLoader'); 
     $('body').find('.ajax-loader').remove(); 
     $('body').find('.ajax-loader-icon').remove(); 
     return false; 
    } //removeAjaxLoader 

    addAjaxLoader = function() { 
     console.log('addAjaxLoader'); 
     removeAjaxLoader(); 
     $('body').append('<div class="ajax-loader"></div><div class="ajax-loader-icon"></div>'); 
     return false; 
    } //addAjaxLoader 
}) (jQuery); 

/******************************************************************* 
*      :: Ready Set Go :: 
*******************************************************************/ 
(function ($) { 
    $(document).ready(function() { 
     console.log('ready complete'); 
     removeAjaxLoader(); 

    }); // document.ready 
}) (jQuery); 
相關問題