LoạiError: 'không xác định' không phải là một hàm (đánh giá '$ (tài liệu)')


139
  1. Tôi đang sử dụng một trang web WordPress.
  2. Tôi đang bao gồm tập lệnh này trong tiêu đề.

Khi tập lệnh tải, tôi gặp lỗi này:

LoạiError: 'không xác định' không phải là một hàm (đánh giá '$ (tài liệu)')

Tôi không biết cái gì gây ra nó hoặc nó có nghĩa là gì.

Trong firebird, tôi nhận được điều này:

$ không phải là một hàm


4
Hãy chắc chắn rằng bạn bao gồm cả libary jQuery trước tập lệnh tùy chỉnh của bạn và rằng không có lỗi nào trong Nettab Fireorms (đảm bảo jQuery thực sự được tải).
wsanville

... Vâng, tất nhiên jQuery đang tải trước. Tôi khá chắc chắn rằng đó là một vấn đề tuyệt vời của WordPress.
dcolumbus

Câu trả lời:


239

Wordpress sử dụng jQuery trong chế độ noConflict theo mặc định. Bạn cần tham chiếu nó bằng jQuerytên biến, không $, ví dụ: sử dụng

jQuery(document);

thay vì

$(document);

Bạn có thể dễ dàng gói nó trong một hàm tự thực thi $để tham chiếu lại jQuery (và cũng tránh gây ô nhiễm không gian tên toàn cầu), vd

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

5
Kịch bản là không cần thiết; bạn chỉ có thể gọi jQuery(document)thay vì $(document)bất cứ nơi nào bạn muốn. Nếu bạn muốn sử dụng $thay thế, thì đoạn script trên chỉ đơn giản là tạo một hàm lấy một đối số $sau đó thực thi nó đi qua jQuery; Nói tóm lại, trong hàm, $trỏ đến jQuery như bạn mong đợi.
El Yobo

2
Trên thực tế, những gì tôi đã làm là đặt bình thường của tôi $(document).ready(function() { // code });thay cho $(document);... của bạn hoạt động như một bùa mê.
dcolumbus

1
Vâng, đó là những gì tôi đã đề xuất - "trong hàm, $ trỏ tới jQuery như bạn mong đợi".
El Yobo

Chà, nó giúp bạn tiết kiệm được một vài ký tự theo cách đó :) Chi tiết khác về dạng! Hàm () {} () của câu lệnh tự thực thi .
El Yobo

Tôi biết đó là @ElYobo cũ, nhưng tôi nghĩ bạn có thể chỉnh sửa bài đăng của mình và thêm ví dụ từ nhận xét đầu tiên của bạn vào phản hồi làm ví dụ thứ hai. Cảm ơn bạn đã tiết kiệm thời gian cho tôi =)
Manatax

25

Sử dụng jQuery noConflict. Nó đã làm điều kỳ diệu cho tôi

var example=jQuery.noConflict();
example(function(){
example('div#rift_connect').click(function(){
    example('span#resultado').text("Hello, dude!");
    });
});

Đó là, giả sử bạn đã bao gồm jQuery trên HTML của mình

<script language="javascript" type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>


11

Hãy thử đoạn trích này:

jQuery(function($) {
  // Your code.
})

Nó làm việc cho tôi, có lẽ nó cũng sẽ giúp bạn.


11

Tôi chỉ gặp vấn đề này trên Chrome.

Tôi đã thử thêm

var $ =jQuery.noConflict();

ngay trước khi gọi

$(document).ready(function () {

Nó đã làm việc.

Cảm ơn rất nhiều


Cảm ơn vì điều này. Tôi biết rằng tôi có thể giải quyết vấn đề bằng cách sử dụng "jQuery" thay vì "$" nhưng vấn đề của tôi là nó đã chỉnh sửa Komodo khi được viết theo cách đó nên tôi phải chọn giữa việc gợi ý / hoàn thành mã trên $ hoặc JavaScript thực sự hoạt động. Phương pháp này cho tôi có cả hai.
George Kendros

6

Đồng thời kiểm tra bao gồm jQuery, theo sau là một số thành phần / thư viện khác (như Giao diện người dùng jQuery) và sau đó vô tình bao gồm cả jQuery - điều này sẽ định nghĩa lại jQuery và loại bỏ các trình trợ giúp thành phần (như .datepicker) khỏi ví dụ.


4
 ;(function($){
        // your code
    })(jQuery);

Đặt mã js của bạn bên trong bao đóng ở trên, nó sẽ giải quyết vấn đề.


4

Tôi sẽ sử dụng cái này

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

2

Tôi cũng đã phải đối mặt với những vấn đề như vậy nhiều lần trong nhà cung cấp dịch vụ phát triển web. Trên thực tế, đây không phải là xung đột JS, Khi chúng tôi tải trang web html vào trình duyệt, chúng tôi không gặp phải lỗi như vậy, nhưng khi chúng tôi tải các loại trang web này qua localhost, chúng tôi gặp phải vấn đề như vậy. Đó là vì localhost. Khi chúng ta tải tập lệnh thông qua localhost, nó sẽ quét tập lệnh và kết xuất lại. Nhưng khi chúng tôi không sử dụng localhost. Nó chỉ quét đầu ra. Ví dụ, khi chúng tôi viết mã php đặt localhost và chạy mà không có máy chủ, chúng tôi gặp lỗi. Nhưng nếu mã chính xác và được chạy qua máy chủ, chúng tôi sẽ nhận được đầu ra thực tế và khi chúng tôi sử dụng phần tử kiểm tra, chúng tôi nhận được mã đầu ra ở định dạng HTMl nhưng không phải ở định dạng PHP, điều này là do kết xuất mã.

Đây là lỗi kết xuất. Vì vậy, để khắc phục các lỗi mã jquery này, một trong những giải pháp có thể là sử dụng phương pháp này.

jQuery(document).ready(function($){
/******** Body of Jquery Code*****/
});

Những gì mã này làm là đăng ký '$' là biến đối với hàm bằng cách áp dụng jquery. Khác theo mặc định, tập tin .js chỉ được đọc dưới dạng javascript.


1

Tôi cũng gặp vấn đề này khi đưa jQuery vào tiêu đề trang của mình, không nhận ra máy chủ đã tự động đưa nó vào trang. Vì vậy, tải trang của bạn trực tiếp và kiểm tra nguồn để xem jQuery có được liên kết hay không.


1

Hai điều:

  1. Hãy chắc chắn rằng bạn đã thêm thư viện jQuery, trước $ (tài liệu) của bạn.
  2. Sau đó, chỉ cần thay đổi tất cả "$" với: jQuery, như các nhận xét trước đó.

1

gói tất cả các kịch bản giữa này ...

<script>
    $.noConflict();
    jQuery( document ).ready(function( $ ) {
      // Code that uses jQuery's $ can follow here.
    });
</script>

Nhiều thư viện JavaScript sử dụng $ làm hàm hoặc tên biến, giống như jQuery. Trong trường hợp của jQuery, $ chỉ là bí danh cho jQuery, vì vậy tất cả các chức năng đều có sẵn mà không cần sử dụng $. Nếu bạn cần sử dụng một thư viện JavaScript khác cùng với jQuery, hãy trả lại quyền kiểm soát $ trở lại thư viện khác với lệnh gọi đến $ .noConflict () . Các tham chiếu cũ của $ được lưu trong quá trình khởi tạo jQuery; noConflict () chỉ cần khôi phục chúng.


1

Bạn có thể sử dụng cả jQuery và $ trong đoạn trích dưới đây. nó làm việc cho tôi

jQuery( document ).ready(function( $ ) {
  // jQuery(document)
  // $(document)
});

1

Bạn có thể truyền $ trong hàm ()

jQuery(document).ready(function($){

// jQuery code is in here

});

hoặc bạn có thể thay thế $(document);bằng cái nàyjQuery(document);

hoặc bạn có thể sử dụng jQuery.noConflict()

var jq=jQuery.noConflict();
jq(document).ready(function(){  
  jq('selector').show();
});
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.