$ không được xác định bằng jQuery trong WordPress


32

Tôi biết rằng jQuery đã được tải, vì tôi có thể tắt $'jQuery' và mọi thứ hoạt động như mong đợi, nhưng đây sẽ là một kịch bản lộn xộn nếu tôi không thể sửa lỗi này

Kịch bản này:

jQuery(document).ready(function(){
    $("ul.vimeo_desc_feed li a").click(function(){
        alert($(this).attr('href'));
        return false;
    })
});

Tạo ra lỗi $ is not a function

Kịch bản này:

jQuery(document).ready(function(){
    jQuery("ul.vimeo_desc_feed li a").click(function(){
        alert(jQuery(this).attr('href'));
        return false;
    })
});

hoạt động tốt

Câu trả lời:


42

Bạn có thể gói javascript của mình bên trong một hàm tự gọi, sau đó chuyển jQuerylàm đối số cho nó, sử dụng $làm tên biến cục bộ. Ví dụ:

(function($) {
  $(document).ready(function(){
    $("ul.vimeo_desc_feed li a").click(function(){
      alert($(this).attr('href'));
      return false;
    })
 });
}(jQuery));

Nên làm việc như dự định.

Nếu tôi nhớ chính xác phiên bản jQuery do WP cung cấp (phiên bản bạn nhận được nếu bạn wp_enqueue_script('jquery')) đặt jQuery không có xung đột ngay lập tức, gây ra $không xác định.


À, tôi hiểu rồi. Tôi đã từng thêm nó bằng tay, điều này giải thích tại sao tôi không gặp phải vấn đề này.
Fuzz nhẹ

Cảm ơn bạn, tôi đã sử dụng định dạng thay thế với jQuery ở đầu thay vì kết thúc .. nhưng không thể tìm ra cách trả về giá trị, với định dạng này tôi chỉ thêm trả về trước khi hàm tự gọi và nó hoạt động.
eselk

Câu trả lời rất hữu ích.
MarkSkayff

32

Bạn đã gần tới!

jQuery(document).ready(function($){
    $("ul.vimeo_desc_feed li a").click(function(){
        alert($(this).attr('href'));
        return false;
    })

});

Bạn phải chuyển một tham chiếu đến jQuery dưới dạng $hàm vào phương thức của mình nếu không nó sẽ không hoạt động. Nếu bạn chỉ đặt $ trong function()cuộc gọi đầu tiên như tôi đã làm ở trên, mọi thứ sẽ hoạt động tốt.


4
+1: Điều đó dễ đọc hơn là đặt jQueryở cuối.
fuxia

1
... nhưng đó không phải là cách tiêu chuẩn để thực hiện một chức năng ẩn danh. forum.jquery.com/topic/jquery-anonymous-feft-calls
BryanH

5
Có và không. Cả hai đều được coi là cách "tiêu chuẩn" để làm điều đó. Người ta tạo ra một lớp singleton đã $được định nghĩa cục bộ. Cái kia chỉ định nghĩa một trình xử lý cho readysự kiện của tài liệu và chuyển đối tượng jQuery vào trình xử lý như $. Nếu bạn đang cố gắng nối vào readysự kiện, phương pháp thứ hai được sử dụng rộng rãi hơn. Nếu bạn cần jQuery cho bất kỳ mục đích nào khác ( $.browserví dụ để kết nối ), bạn sẽ sử dụng một lớp singleton.
EAMann

1 cho jQuery (document) .ready (function ($) {... mor infos về jquery và WordPress có thể bạn cũng đọc về bài đăng của tôi: wpengineer.com/2028/small-tips-using-wordpress-and-jquery .
bueltge

6

Truyền một hàm cho jQuery là viết tắt $(document).ready(...)sau đó bằng cách đặt $làm tham số đầu tiên của cuộc gọi lại của bạn, bạn tạo một bí danh cho jQuery trong cuộc gọi lại đó:

jQuery(function($) {
    $("ul.vimeo_desc_feed li a").click(function(){
        alert($(this).attr('href'));
        return false;
    });
});

Bạn có thể xem tài liệu cho việc này ở đây .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.