Uncaught ReferenceError: $ không được xác định?


657

Làm thế nào mà mã này ném một

Uncaught ReferenceError: $ không được xác định

khi nào thì ổn?

$(document).ready(function() {
    $('#tabs > ul').tabs({ fx: { opacity: 'toggle' } });
    $('#featuredvid > ul').tabs();
});

Kết quả trong các tab không đóng nữa.

jQuery được tham chiếu trong tiêu đề:

<script language="JavaScript" type="text/javascript" src="<?php echo get_option('siteurl') ?>/js/sprinkle.js"></script>
<script language="JavaScript" type="text/javascript" src="<?php echo get_option('siteurl') ?>/js/jquery-1.2.6.min.js"></script>
<script language="JavaScript" type="text/javascript" src="<?php echo get_option('siteurl') ?>/js/jquery-ui-personalized-1.5.2.packed.js"></script>

<script ngôn ngữ = "JavaScript" type = "text / javascript" src = "<? php echo get_option ('siteurl')?> / js / jquery-1.2.6.min.js"> </ script> Bật cái này lên hàng đầu
đội trưởng

Trong trường hợp của tôi, JQuery nằm ở phần chân trang, do đó, hàm JS được gọi đầu tiên.
Daniel Beltrami

Điều này có trả lời câu hỏi của bạn không? ReferenceError: $ không được xác định
Brynn

Câu trả lời:


687

Bạn nên đặt các tài liệu tham khảo cho các kịch bản jquery đầu tiên.

<script language="JavaScript" type="text/javascript" src="/js/jquery-1.2.6.min.js"></script>
<script language="JavaScript" type="text/javascript" src="/js/jquery-ui-personalized-1.5.2.packed.js"></script>
<script language="JavaScript" type="text/javascript" src="/js/sprinkle.js"></script>

27
Chỉ cần chắc chắn rằng điều này là rõ ràng: bạn không thể đặt tham chiếu kịch bản cho jquery-ui trước chính kịch bản jquery. Đó là điều đã khắc phục vấn đề với tôi: đầu tiên là jquery-xxxmin.js, sau đó là jquery-ui-xxxxxx.js.
Wagner da Silva

26
2 năm sau, câu trả lời vẫn chưa được "đánh dấu") Bài viết này mô tả một và 4 trường hợp phổ biến hơn khi lỗi này xảy ra.
Uzbekjon 14/2/13

2
@Uzbekjon Điều đó đã giải quyết nó cho tôi. Đường dẫn đến tập lệnh đã sai trong một trong các HTMLtệp của tôi .
Adam Jensen

@Jeremy, cảm ơn rất nhiều. Cũng đặt nó trước bất kỳ chế độ xem một phần (mvc) nào để nó có sẵn cho bất kỳ tập lệnh nào trong một phần.
Ngày Andrew

1
@Uzbekjon gần 10 năm nay và nó vẫn chưa được đánh dấu. Cảm ơn đã cung cấp các liên kết bài viết.
Modo

235

Bạn đang gọi hàm sẵn sàng trước khi bao gồm JavaScript JavaScript. Tham khảo jQuery trước.


30
@RamSharma Thật ra, đây là câu trả lời đúng. Bạn không cần bất cứ điều gì khác để giải quyết vấn đề.
Derek 朕 會

Vâng Đây là vấn đề của tôi. Đơn giản chỉ cần có jquery SAU khi tham khảo tệp js của tôi. Ôi!
dogonaroof

Trong trường hợp của tôi, tôi đã phải xóa trình trì hoãn khóa khỏi <script src = "/ js / jquery-1.2.6.min.js" defer> </ script>
Charden Daxicen

123

Đây là những gì đã giải quyết nó cho tôi. Ban đầu tôi đã đến Google và sao chép và dán đoạn trích được đề xuất cho jQuery trên trang CDN của họ:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

Đoạn mã không bao gồm HTTP:hoặc HTTPS:trong srcthuộc tính nhưng trình duyệt của tôi, FireFox, cần nó vì vậy tôi đã đổi nó thành: chỉnh sửa: điều này cũng hiệu quả với tôi với Google Chrome

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

Sau đó, nó làm việc.


13
Nói một cách chính xác đoạn trích / ví dụ của Google là chính xác - thuộc tính src của họ là một giao thức ít URL hơn, có nghĩa là trình duyệt nên sử dụng giao thức (HTTP / HTTPS) của trang gọi. Xem paulirish.com/2010/the-protatio-relative-url . Đây là cách tốt nhất để tránh các cảnh báo nội dung hỗn hợp nếu trang của bạn được phục vụ qua SSL và các tập lệnh thì không.
pwdst

12
Một vấn đề phổ biến ở đây, rất có thể là khi URL liên quan đến giao thức được sử dụng trong quá trình phát triển và vào một ngày nắng, bạn cố tải một trang từ tệp cục bộ. Trình duyệt của bạn sẽ cố gắng tải một cách lạc quan file://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.jsvà bạn tự hỏi tại sao nó không hiển thị trong bảng điều khiển mạng.
Pieter Ennes

cảm ơn @PieterEnnes, đây chính xác là trường hợp của tôi. Cảm ơn người trả lời quá!
jwg

43

Nếu tập lệnh tùy chỉnh của bạn được tải trước khi plugin jQuery được tải vào trình duyệt thì loại sự cố này có thể xảy ra. Vì vậy, hãy luôn giữ mã JavaScript hoặc jQuery của riêng bạn sau khi gọi plugin jQuery để giải pháp cho việc này là:

Trước tiên hãy thêm liên kết đến tệp jQuery được lưu trữ tại GoogleApis hoặc tệp jQuery cục bộ mà bạn sẽ tải xuống từ http://jquery.com/doad/ và lưu trữ trên máy chủ của bạn:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

hoặc bất kỳ plugin nào cho jQuery. Sau đó đặt liên kết hoặc tập tin tập lệnh tùy chỉnh của bạn:

<script src="js/custom.js" type="text/javascript"></script>

3
If your custom script is loaded before the jQuery plugin is loaded to the browser then this type of problem may occur câu trả lời hoàn hảo .. trong trường hợp kịch bản của tôi là ở phần chân trang
echoashu

41

Trong trường hợp của tôi, tôi đã đặt .jstệp của mình trước liên kết tập lệnh jQuery, đặt .jstệp sau khi liên kết tập lệnh jQuery đã giải quyết vấn đề của tôi.

<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
<script src="http://code.jquery.com/ui/1.11.2/jquery-ui.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="exponential.js"></script>

Chỉ cần sử dụng điều này để sửa chữa jschart của tôi.
indofraiser

Điều này đã khắc phục sự cố, .js tệp phải được đặt trước liên kết tập lệnh jQuery.
Phương pháp khoa học

27

Được rồi, vấn đề của tôi đã khác - đó là mô hình Bảo mật Tài liệu trong Chrome .

Nhìn vào các câu trả lời ở đây, rõ ràng là bằng cách nào đó tôi đã không tải các tệp jquery của mình trước khi gọi các $(document).ready()hàm vv. Tuy nhiên, tất cả họ đều ở đúng vị trí.

Trong trường hợp của tôi, điều này là do tôi đã truy cập nội dung qua kết nối HTTPS an toàn, trong khi trang đang cố tải xuống dữ liệu được lưu trữ CDN từ google, v.v. Giải pháp là lưu trữ chúng cục bộ và sau đó bao gồm trực tiếp thay vì từ CDN mỗi lần.

Chỉnh sửa : Cách khác để thực hiện việc này là liên kết đến tất cả nội dung được lưu trữ trên CDN dưới dạng https: // thay vì http: // - sau đó mô hình không phàn nàn.


5
Ngoài ra, lưu ý rằng bạn có thể bỏ giao thức khỏi các liên kết và nó sẽ chọn một liên kết phù hợp tùy thuộc vào ngữ cảnh (giả sử cả hai phiên bản http và https tồn tại). Xem stackoverflow.com/a/3622615/4332
Adrian Mouat

Vâng. cái này đã giải quyết vấn đề của tôi, tôi đã tải các tập lệnh từ một Url như thế này ọ // cdnjs.cloudflare.com / ajax / libs / jquery / 1.12.0 / jquery.min.js. Sử dụng ọ cdnjs ... ạn hoạt động rất tốt
user9869932

25

Thêm thư viện trước khi bạn bắt đầu tập lệnh. Bạn có thể thêm bất kỳ CDN nào sau đây để khởi động tập lệnh.

Google:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

Microsoft

<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.min.js"></script>

Jquery

Nếu bạn muốn bất kỳ phiên bản cdn Jquery khác kiểm tra liên kết này .

Sau đây:

<script type="text/javascript">
$(function(){
    //your stuff
});
or
$(document).ready(function(){
    //your stuff
});    
</script>

Từ ngữ:

<script type="text/javascript">
var $ = jQuery;
jQuery(document).ready(function($){
     //your stuff
});
</script>

19

Nếu nó trong wordpress, có thể cần phải thay đổi

$(document).ready(function() {

đến

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

hoặc thêm

var $ = jQuery;

trước

$(document).ready(function() {

19

Tôi đã có cùng một vấn đề chính xác và không có giải pháp nào ở trên giúp được. tuy nhiên, tôi chỉ liên kết các .csstập tin sau khi các .jstập tin và vấn đề biến mất một cách kỳ diệu. Hi vọng điêu nay co ich.


13
Trước tiên, để có hiệu suất hiển thị trang tốt hơn, bạn phải luôn liên kết các tệp CSS trước các tệp JS. Thứ hai, thứ tự của các tập tin css và js sẽ không có hiệu lực trong việc tạo thành hiện tại.
Uzbekjon

12
"Điều gì đã khắc phục sự cố của bạn không nên khắc phục sự cố của bạn và bạn không nên khắc phục sự cố của mình."
Andrew

14

Trong trường hợp của tôi, tôi đã có tài liệu tham khảo nàyError vì thứ tự các lệnh gọi script là sai. Giải quyết điều đó bằng cách thay đổi thứ tự:

<script src="js/index.js"></script>
<script src="js/jquery-1.10.2.js"></script>

đến

<script src="js/jquery-1.10.2.js"></script>
<script src="js/index.js"></script>

1
Chủ yếu đây là vấn đề tôi cũng đã tìm thấy khi xảy ra lỗi tham chiếu cho '$'
Dipak

14

Tôi muốn cố gắng làm cho kịch bản của tôi không đồng bộ . Sau đó, tôi đã quên nó và khi tôi phát trực tiếp tệp [custom] .js chỉ được tải 50% thời gian trước jQuery.js.

Vì vậy, tôi đã thay đổi

<script async src="js/script.js"></script>

đến

<script src="js/script.js"></script>

8

Tôi đã có cùng một vấn đề và tôi đã giải quyết bằng cách đặt jQuery lên đầu tất cả các mã javascript tôi có trong mã của mình.

Một cái gì đó như thế này:

<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<script src="js/app.js" type="text/javascript"></script>
<script src="js/form.js" type="text/javascript"></script>
<script src="js/create.js" type="text/javascript"></script>
<script src="js/tween.js" type="text/javascript"></script>

Hy vọng có thể giúp một số người trong tương lai.


8

Bạn đang gọi ready()hàm trước khi bao gồm JavaScript JavaScript. Tham khảo jQuery trước.

Nếu bạn đang ở trong ASP.NET MVC, bạn có thể chỉ định khi nào mã JS của bạn sẽ được hiển thị, bằng cách thực hiện việc này:

1, Trong bạnpage.cshtml bọc của bạn <script>thẻ của bạn vào một phần và đặt tên cho nó, tên phổ biến để sử dụng là 'scripts':

@section scripts {
    <script>
        // JS code...
    </script>
}

2, Trong _Layout.cshtmltrang của bạn thêm @RenderSection("Scripts", required: false), hãy đảm bảo đặt nó sau khi bạn tham chiếu nguồn Jquery, điều này sẽ làm cho mã JS của bạn hiển thị muộn hơn Jquery.


6

Nếu bạn đang làm điều này trong .Net và có tệp tập lệnh được tham chiếu đúng và jQuery của bạn trông ổn, hãy đảm bảo rằng người dùng của bạn có quyền truy cập vào tệp tập lệnh. Dự án tôi đang thực hiện (một đồng nghiệp) đã có web.config từ chối quyền truy cập vào người dùng ẩn danh. Trang tôi đang làm việc có thể truy cập được đối với người dùng ẩn danh do đó họ không có quyền truy cập vào tệp tập lệnh. Bỏ những thứ sau vào web.config và tất cả đều đúng trên thế giới:

  <location path="Scripts">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>

6

Trong trường hợp của tôi đó là một lỗi đánh máy, tôi đã quên một dấu gạch chéo ngược và tham chiếu nguồn không chính xác.

Trước src="/scripts/jquery.js"

Sau    src="scripts/jquery.js"


5

Tệp nguồn jquery-1.2.6.min.jskhông được gọi là lệnh jQuery $()được thực thi sớm hơn <..src='jquery-1.2.6.min.js'>.

Vui lòng chạy <.. src="/js/jquery-1.2.6.min.js..">đầu tiên và đảm bảo đường dẫn src đúng, sau đó thực hiện lệnh jquery

$(document).ready(function() 

5

Điều này đã xảy ra với tôi trước đây.

Lý do là tôi đang kết nối Android với một webview với một JS. Và tôi đã gửi một tham số mà không có dấu ngoặc kép.

js.sayHello(hello);

và khi tôi đổi nó thành

js.sayHello('hello');

nó đã làm việc.


Tôi không biết tham số nào mà không có dấu ngoặc kép nghĩa là ... có vẻ như bạn có lỗi tham chiếu.
Aluan Haddad

Tôi gặp vấn đề ở Freemarker và lý do là không có dấu ngoặc đơn, vì vậy giá trị được xử lý không giống như một chuỗi, mà là một biến
torina

4

Tệp JavaScript của bạn bị thiếu nên đã xảy ra lỗi này. Chỉ cần thêm tệp JavaScript bên trong <head>thẻ. Xem ví dụ:

<script src="js/sample.js" type="text/javascript"></script>
<link href="css/sample.css" rel="stylesheet" type="text/css" />

hoặc thêm mã sau vào thẻ:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

4

Lỗi cũng sẽ xảy ra trong hai kịch bản sau đây.

  1. Phần tử tập lệnh @section bị thiếu trong tệp HTML
  2. Lỗi khi truy cập các phần tử DOM. Ví dụ: việc truy cập phần tử DOM được đề cập là $ ("js-toggle") thay vì $ (". Js-toggle"). Trên thực tế là khoảng thời gian bị thiếu

Vì vậy, 3 điều cần tuân thủ - kiểm tra các tập lệnh được yêu cầu được thêm vào, kiểm tra xem nó có được thêm vào theo thứ tự bắt buộc và lỗi cú pháp thứ ba trong Tập lệnh Java của bạn không.


Vâng. và cho các thuộc tính id $ ('# someDiv')
cagcak

3

Đừng! Tôi đã có dấu ngoặc kép trong các thẻ của mình khiến tham chiếu jquery bị phá vỡ. Thực hiện kiểm tra trong Chrome cho phép tôi thấy rằng tệp không được liên kết chính xác.


3

Trong trường hợp của tôi, tôi quên bao gồm điều này:

 <script src ="jquery-2.1.1.js"></script>

Trước đó tôi đã bao gồm chỉ jquery-mobile đã gây ra lỗi này.


3

Tôi đã sửa đổi thẻ script để trỏ đến đúng nội dung và thay đổi thứ tự script thành đúng trong trình chỉnh sửa. Nhưng hoàn toàn quên để lưu thay đổi.


2

Tôi đã có một vấn đề tương tự và đó là vì tôi đã thiếu một đóng> trên một liên kết trang mẫu.


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

Tôi có một vấn đề tương tự, và bạn biết không, vì mạng bị ngắt kết nối khi tôi kiểm tra trên webview thiết bị Android và tôi không nhận ra điều đó, và js cục bộ không gặp vấn đề gì vì không cần mạng. Có vẻ vô lý nhưng nó lãng phí ~ 1 giờ của tôi để tìm ra nó.


2

Bạn chưa tham khảo thư viện jQuery.

Bạn sẽ cần bao gồm một dòng tương tự như thế này trong HTML của bạn:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

2

Tôi đã có vấn đề tương tự. Máy chủ thử nghiệm của tôi đã hoạt động tốt với "http". Tuy nhiên, nó đã thất bại trong sản xuất có SSL.

Vì vậy, trong sản xuất, tôi đã thêm "HTPPS" thay vì "HTTP" và trong thử nghiệm, tôi giữ nguyên là "HTTP".

Kiểm tra:

wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js', array(), null, false );

wp_register_script( 'custom-script', plugins_url( '/js/custom.js', __FILE__ ), array( 'jquery' ) );

Sản xuất:

wp_register_script( 'jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js', array(), null, false );

wp_register_script( 'custom-script', plugins_url( '/js/custom.js', __FILE__ ), array( 'jquery' ) );

Hy vọng điều này sẽ giúp một người đang làm việc trên wordpress.


1

Lạ lùng thay, vấn đề của tôi đến từ PHP.

Một cuộc gọi API REST đã thất bại và sau đó nó đã phá vỡ việc tải các thư viện. Vì thất bại là từ cuộc gọi REST, nên nó không gây ra lỗi biên dịch php.

Giữ điều này như là một tùy chọn cũng được, nếu tải jquery có vẻ ổn.


1

Tôi gặp vấn đề này, khi tôi đang duyệt internet thông qua điểm truy cập di động. nó cũng đang nén hình ảnh và thêm đoạn script sau vào cuối thẻ body

<script language="javascript"><!--
bmi_SafeAddOnload(bmi_load,"bmi_orig_img");//-->
</script>

Khi tôi kết nối với kết nối wifi thích hợp, tất cả dường như hoạt động tìm cho tôi. Hy vọng điều này sẽ giúp ai đó.


1

Điều này cũng có thể xảy ra, nếu có vấn đề về mạng. Điều đó có nghĩa là, mặc dù đã có "tập lệnh jquery" và được bao gồm trước khi sử dụng, vì tập lệnh jquery không thể truy cập được, tại thời điểm tải trang, do đó các định nghĩa cho "$" được coi là "tài liệu tham khảo không xác định".

ĐỐI VỚI MỤC ĐÍCH / DEBUG MỤC ĐÍCH :: Bạn có thể thử truy cập url "jquery-script" trên trình duyệt. Nếu nó có thể truy cập, trang của bạn, nên tải đúng cách, nếu không nó sẽ hiển thị lỗi đã nói (hoặc các lỗi liên quan đến tập lệnh khác). Ví dụ - http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js nên có thể truy cập được, trên trình duyệt (hoặc trạng thái bối cảnh của trình duyệt).

Tôi gặp vấn đề tương tự, trong đó tôi có thể tải trang html (sử dụng tập lệnh) trong trình duyệt windows-host-browser, nhưng không thể tải trong vm-ub Ubuntu. Giải quyết vấn đề mạng, giải quyết vấn đề.


0
var $ = jQuery;
jQuery(document).ready(function($){

1
Đây hoàn toàn không phải là một câu trả lời. Bạn phải thêm một số giải thích.
jmlemetayer

Đây là một giải pháp cho Wordpressbạn nên đề cập đến điều đó.
Hexodus

Bạn đã cứu ngày của tôi. Đã đấu tranh để làm điều đó trong WordPress và không có gì ngoài giải pháp này hoạt động như một cơ duyên.
rahimv
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.