2013-08-22 46 views
13

Tôi đã gãi đầu trong 2 ngày này, khá chắc chắn tôi chỉ thiếu một cái gì đó đơn giản nhưng tôi không thể cho cuộc sống của tôi tìm ra lý do tại sao nó không hoạt động.JS/jQuery TypeError: jQuery (...). Datepicker không phải là chức năng

Tôi đang cố gắng sử dụng tập lệnh bên dưới trên trang web WordPress của mình để vô hiệu hóa các ngày cụ thể trong trường datepicker trong biểu mẫu ContactForm7.

Tôi có thể tải tập lệnh bằng jsfiddle với trường nhập đơn giản sử dụng cùng id và hoạt động hoàn hảo ... nhưng khi tôi thêm nó vào trang web của mình, ngày không bị tắt và có lỗi trong lỗi JS bảng điều khiển có nội dung "jQuery (...). datepicker không phải là chức năng"

Tôi đã thêm nó vào tệp header.php của mình, ngay bên dưới cuộc gọi wp_head() và ngay phía trên thẻ </head>. Tôi đã gán trường datepicker của tôi với id là dpick như tập lệnh sử dụng.

Tôi đọc mà lỗi này thường xảy ra khi sử dụng các biểu tượng $ vì nó có thể xung đột với các kịch bản jQuery khác trong WordPress ... vì vậy họ đề nghị thay thế $ với jQuery thay vì (mà tôi đã thực hiện trong kịch bản dưới đây). .. nhưng tôi vẫn gặp lỗi

var unavailableDates = ["1-9-2013", "2-9-2013", "3-9-2013", "4-9-2013", "5-9-2013"]; 

    function unavailable(date) { 
      dmy = date.getDate() + "-" + (date.getMonth() + 1) + "-" + date.getFullYear(); 
      if (jQuery.inArray(dmy, unavailableDates) == -1) { 
       return [true, ""]; 
      } else { 
       return [false, "", "Unavailable"]; 
     } 
    } 

     jQuery(function() { 
      jQuery('#dpick').datepicker({ 
       dateFormat: 'dd MM yy', 
       beforeShowDay: unavailable 
     }); 

    }); 

Không thể cảm ơn đủ để bạn có thể cung cấp ... điều này có vẻ đơn giản như vậy nhưng tôi dường như không thể che đầu mình xung quanh nó!

+0

bạn đã bao gồm thư viện jquery ui vào trang web của mình chưa? – maverickosama92

+0

@ maverickosama92 có, tôi tin rằng đó là một phần của cuộc gọi 'wp_head()' ... khi tôi xem nguồn trang của mình, tôi có thể thấy rằng nó đang gọi lõi jquery ui cũng như một loạt các mô-đun jquery ui cụ thể – Iconoclast

+0

Dường như tất cả mọi thứ nhưng trình bao gồm ngày tháng của giao diện người dùng jQuery được đưa vào trang web của bạn. Có thể muốn xem xét điều đó. Core không bao gồm datepicker tự động http://i.imgur.com/Hd9FdsL.png – vernak2539

Trả lời

1

Tôi không có nhiều kinh nghiệm với wordpress vì vậy tôi có thể vượt quá cố gắng giúp đỡ. Tôi đã sử dụng pickadate mặc dù.

Trong quá khứ tôi đã nhận lỗi này trước khi

Uncaught TypeError: Object [object Object] has no method 'datepicker'

Nó thường xảy ra vì tôi không tải các tập tin js theo thứ tự đúng. Tìm kiếm các công cụ dành cho nhà phát triển trên trang web của bạn Tôi không thấy plugin được chọn ở đâu. Tôi sẽ kiểm tra (nếu bạn chưa có) để đảm bảo rằng các plugin đang được nạp cũng như được nạp theo thứ tự đúng.

+0

bạn có biết tham chiếu nào tôi cần sử dụng để có thể sử dụng datepicker không? Tôi đã thử nhưng nó vẫn không làm việc – Iconoclast

21

Các số lý do cho lỗi này:

  1. Các jquery.ui được sử dụng trước khi jquery.
  2. $ được sử dụng bởi một thư viện khác.
  3. Các jquery lib được tham chiếu cục bộ (wordpress) có phiên bản khác nhau từ đó sử dụng jquery.ui.
  4. Khi đúng thư viện và phiên bản được tham chiếu, bộ nhớ cache của trình duyệt phải được xóa.
+0

Dường như jQuery được nạp trước jQueryUI, vì vậy mà sẽ không sao. Tôi không sử dụng $ trong kịch bản, vì vậy sẽ ổn thôi. Theo bảng điều khiển WP của tôi tất cả mọi thứ được cập nhật vì vậy tôi không nghĩ rằng đó là vì các phiên bản jQuery khác nhau ... – Iconoclast

+0

lỗi 1 là vấn đề đối với tôi. –

+0

Jquery.ui được sử dụng trước khi jquery. Đây là lý do phổ biến nhất –

0

Được rồi, tôi gặp vấn đề tương tự cách đây một thời gian và giải pháp cho vấn đề chỉ là thêm để bao gồm jquery.ui.datepicker.js được bao gồm trong gói jquery. Tuy nhiên tôi vẫn tự hỏi tại sao tôi phải bao gồm điều này vì Im sử dụng jquery.ui trước và jquery.ui.custom hoặc đơn giản là tệp jquery js sẽ thực hiện chức năng .datepicker() cho tôi.

Dù sao thì nó vẫn tốt đẹp bây giờ nó hoạt động. Hi vọng điêu nay co ich.

+0

hey bạn có thể cho tôi cdn này. Không thể tìm thấy –

+0

không. câu trả lời ur isnt làm việc ở đây. – Jogi

6

Tôi gặp sự cố tương tự. Trong trường hợp của tôi, tôi đã có hai tài liệu tham khảo kịch bản jQuery trên trang chính của tôi (_Layout.cshtml trong ASP.NET MVC).Tôi thêm 1 tham chiếu đến jQuery ở đầu nhưng đã có 1 ở dưới cùng của trang mà tôi không để ý ... Trong Firebug đây là những gì tôi nhìn thấy:

enter image description here

Như bạn có thể nhìn thấy , jQuery UI đang ngồi ở giữa cuộc xung đột! : D Điều này đã cho tôi một thời gian để tìm ra.

+0

giúp tôi rất nhiều ... vì vậy bạn loại bỏ một sau khi 'jquery-ui-1.10.3.js' –

3

kiểm tra xem tất cả các tệp có được tải hay không. Nên có 200 trạng thái ok.

+1

Ok, tôi đang tìm lỗi này, và sau đó MỘT tệp css chưa được tải ... Câu trả lời của bạn đã làm tôi nhìn Fidller, và bây giờ mọi thứ đều ổn ... –

0

tôi chuyển tất cả các kịch bản từ chân tới đầu sau đó mọi chuyện bắt đầu làm việc propertly

0

Tôi biết đây là một vấn đề cũ. Tôi đã có cùng một vấn đề này và đó là vì bao gồm cả jquery.min.js cùng với jquery-1.10.2.js và jquery-ui.js. Vì vậy, bằng cách loại bỏ jquery.min.js vấn đề của tôi về TypeError: $ (...). Datepicker không phải là một hàm đã được giải quyết. Hy vọng nó sẽ giúp cho ai đó.

0

Tôi biết câu hỏi này là cũ nhưng có thể Nó có thể giúp người khác:

Cách tốt nhất để bao gồm js trong wordpress là để làm điều đó bằng Nó xếp hàng chức năng trong php template:

wp_enqueue_script('script', get_template_directory_uri() . '/js/script.js', array ('jquery'), 1.1, true); 

(đã xem here)

Nó cho phép khai báo các phụ thuộc của tập lệnh, trong trường hợp này là trình đếm ngày tháng jquery. Bạn có thể kiểm tra de built-in kịch bản wordpress có thể cung cấp trong:

https://developer.wordpress.org/themes/basics/including-css-javascript/#default-scripts-included-and-registered-by-wordpress

Wordpress cung cấp phụ thuộc đặc biệt cho jquery datepicker vì vậy bạn có thể bao gồm kịch bản của bạn với một cái gì đó như:

wp_enqueue_script('script', 'mypath' . '/js/script.js', array ('jquery', 'jquery-ui-datepicker'), 1.7, true); 

Lưu ý rằng nếu bạn chỉ khai báo phụ thuộc jquery bạn sẽ nhận được một lỗi như

'jQuery.datepicker(...) is not a function'

vì chức năng datepicker không có t bao gồm trong cơ sở wordpres jquery.

3

này đã làm việc cho tôi, cho mâu thuẫn mã jquery -

<script> 
    $.noConflict(); //Not to conflict with other scripts 
jQuery(document).ready(function($) { 
$("#datepicker").datepicker({ 
    dateFormat:"yyyy-mm-dd", 
    changeMonth: true, 
    changeYear: true, 
    maxDate: "+0D" 
}); 

}); 
</script> 
0

Tôi đã có một vấn đề tương tự nhưng chỉ trên trình duyệt firefox. Chúng tôi đang sử dụng yêu cầu tải các tệp js. Tôi đã có dòng sau trong javascript của tôi.

require(['jquery', 'jqueryui'], function ($) { 
    $(document).ready(function() { 
     $("#form1").validationEngine({ bindButtons: $(".bindButton") }); 

     $("#txtBidDate").datepicker({dateFormat: 'mm-dd-yy'}); 
     $("#txtInstDate").datepicker({dateFormat: 'mm-dd-yy'}); 
    }); 

Yêu cầu tải js file asynchroulsy và thứ tự không gauranteed trừ khi bạn xác định shim cấu hình hoặc nếu file js của bạn đều được nạp như AMD. Trong trường hợp của chúng tôi, jquery đã được tải sau khi jquery-ui. Chúng ta đã định nghĩa trong main.js để yêu cầu jquery-ui có sự phụ thuộc vào jquery. Điều này đã khắc phục sự cố cho chúng tôi

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