2011-01-13 39 views
32

Tôi đang viết mô-đun Drupal 7 của riêng mình và muốn sử dụng JQuery trong đó.Sử dụng JQuery trong Drupal 7

$('#field').toggle(); 

Nhưng tôi nhận được lỗi này:

TypeError: Property '$' of object [object DOMWindow] is not a function 

Dường như JQuery không được tải. Nếu không, $ phải được xác định.

Mặc dù tôi thực sự bao gồm nó trong tiêu đề:

<script type="text/javascript" src="http://rockfinder.de/misc/jquery.js?v=1.4.4"></script> 

Tôi có phải làm bất cứ điều gì khác để kích hoạt JQuery trong Drupal? Là $ được ghi đè bởi Drupal?

Đó là website: http://rockfinder.orgapage.de

Trả lời

89

From the Drupal 7 upgrade guide:

Javascript should be made compatible with other libraries than jQuery by adding a small wrapper around your existing code:

(function ($) { 
    // Original JavaScript code. 
})(jQuery); 

The $ global will no longer refer to the jquery object. However, with this construction, the local variable $ will refer to jquery, allowing your code to access jQuery through $ anyway, while the code will not conflict with other libraries that use the $ global.

Bạn cũng có thể chỉ sử dụng biến 'jQuery' thay vì biến $ trong mã của bạn.

+0

Cảm ơn! Đó là chính xác những gì tôi đang tìm kiếm và không thể tìm thấy! – JochenJung

+3

Tôi không quen với cú pháp này trong Javascript. Ai đó có thể giải thích những gì đang xảy ra ở đây? –

+2

Về cơ bản, nó tạo ra một bí danh từ $ đến jQuery. Như đã nói ở trên, lý do cho việc này là bao gồm các thư viện JS khác đang sử dụng $. – Berdir

14

Theo Firebug, file jQuery của bạn đang được nạp:

alt text

Nhưng $ đã được ghi đè bởi cái gì khác:

alt text


gì bạn cần làm là tóm lược việc sử dụng các biến $ với một hàm gọi riêng của mình bằng cách sử dụng đối tượng jQuery như đó là lần đầu tiên tranh luận thực tế:

(function ($) { 

// in this function, you can use the $ which refers to the jQuery object 

}(jQuery)); 
+0

Vậy .. tại sao $ không được xác định? Nó có bị ghi đè không? – JochenJung

+2

Đó là để tránh xung đột với các thư viện Javascript khác như Prototype. – Tapirboy

8

Rất có thể kịch bản của bạn không được khởi tạo theo cách này, bạn sẽ phải sử dụng Drupal.behaviors.YOURTHEMENAME

(function ($) { 
Drupal.behaviors.YOURTHEMENAME = { 
attach: function(context, settings) { 

/*Add your js code here*/ 
alert('Code'); 

} 

}; 
})(jQuery);  
+0

Điều này giải quyết vấn đề của tôi. Tôi đã sử dụng d7. Cảm ơn guus –

+2

bạn không nên sử dụng '} (jQuery));' thay vì '}) (jQuery);' trên dòng cuối cùng của mã của bạn? – FLY

+0

bạn huyền thoại tuyệt đối, đây là nó! Mọi người đều lắng nghe, đây là cách bạn làm điều đó trong Drupal !!!! – weaveoftheride

0

"$ không phải là một chức năng" là một lỗi rất phổ biến mà bạn có thể gặp phải khi làm việc với jQuery. Bạn có thể thử bất kỳ câu trả lời của đưa ra dưới đây:

(function($){ 
//your can write your code here with $ prefix 
})(jQuery); 

HOẶC

jQuery(document).ready(function($){ 
//Write your code here 
}); 

Về cơ bản này sẽ cho phép mã của chúng tôi để chạy và sử dụng các phím tắt cho $ JQuery.

Các vấn đề liên quan