2010-09-30 28 views
25

Tôi rất mới với jQuery và cố gắng chạy một hộp thoại jQueryUI khá đơn giản trong ứng dụng PHP của tôi. Trong bảng điều khiển firebug tôi nhận được lỗi:jQueryUI - ngoại lệ không bắt buộc: không thể gọi các phương thức

uncaught exception: cannot call methods on dialog prior to initialization; attempted to call method 'open' 

Dưới đây là mã của tôi:

$(function() { 
    $("#dialog").dialog({ 
     autoOpen: false, 
     show: "blind", 
     hide: "explode" 
    }); 

    $("#opener").live('click',function() { 
     $("#dialog").dialog("open"); 
     return false; 
    }); 
}); 

tôi đã làm một số googling về lỗi và không có nhiều bật lên, ngoại trừ jquery.ui.js đó là tạo ra các lỗi với:

if (isMethodCall) { 
    this.each(function() { 
     var instance = $.data(this, name); 
     if (!instance) { 
      throw "cannot call methods on " + name + " prior to initialization; " + 
"attempted to call method '" + options + "'"; 
     } 
... 

Bất kỳ ý tưởng nào? Tôi đánh giá cao bất kỳ sự trợ giúp nào về thông báo lỗi này là gì và cách giải quyết nó.

CẬP NHẬT: Tôi đã cố gắng nhận xét các tùy chọn hiển thị/ẩn và điều đó không ảnh hưởng đến vấn đề của tôi. Dưới đây là HTML:

<div class="demo"> 

    <div id="dialog" title="Basic dialog"> 
     <p>This is an animated dialog which is useful for displaying information. The dialog window can be moved, resized and closed with the 'x' icon.</p> 
    </div> 

    <button id="opener">Open Dialog</button> 

</div><!-- End demo --> 

HTML này được bao gồm trong tệp PHP, được bao gồm trong tệp PHP khác.

+1

Hình như jQuery-UI nghĩ rằng bạn đã không được khởi tạo hộp thoại trước khi gọi phương pháp mở của nó. Tôi muốn loại bỏ các tùy chọn hơi kỳ lạ cho hiển thị và ẩn mà bạn đã sử dụng, để thu hẹp nếu đó là vấn đề. Ngoài ra hãy chắc chắn rằng bạn có một phần tử với id 'dialog' trong đánh dấu của bạn. Nếu điều đó không hiệu quả, bạn sẽ phải cung cấp đánh dấu thực tế bạn đang sử dụng để chúng tôi có cơ hội gỡ lỗi. – Thomas

+0

Xin chào Thomas, tôi đã xóa tùy chọn hiển thị/ẩn (không có hiệu lực) và dán HTML của tôi ở trên, cảm ơn – themerlinproject

+1

Tôi nghĩ rằng nó có liên quan đến câu cuối cùng của tôi "HTML được bao gồm trong tệp PHP, được BAO GỒM trong một PHP khác tập tin".Tôi đã được thông qua các vấn đề với jQuery và PHP bao gồm và, kết quả là, tôi đã bắt đầu sử dụng live() để làm cho các chức năng có sẵn cho nội dung ajax'd trong tương lai (chẳng hạn như div này). Tôi không biết tại sao nó không hoạt động ở đây. – themerlinproject

Trả lời

21

OK, nó phải làm với thực tế là tôi đã đặt hộp thoại DIV trên một tệp PHP chưa được tải vào thời điểm JS của tôi được tải. Vì vậy, tôi đã di chuyển DIV cho hộp thoại lên đến một trang cao hơn và nút này hoạt động trên bất kỳ trang nào trong suốt ứng dụng của tôi ngay bây giờ. Tôi mong điều này giúp được người nào khác.

+7

@ user410341 - Rất vui khi bạn tìm ra (và tôi có thể giúp tôi giải quyết vấn đề khác). Nếu bạn muốn, bạn có thể chấp nhận câu trả lời của riêng bạn cho câu hỏi này để giúp mọi người trong tương lai nhanh chóng tìm thấy câu trả lời. :-) – JasCav

+0

Vấn đề tương tự xảy ra với tôi nhưng gọi hàm "remove" (điều này gọi phương thức 'destroy'. Bạn đúng cho vấn đề này, tôi đã sửa nó thêm $ (document) .ready (function() {. ..}), xung quanh cuộc gọi "xóa" – gotqn

1

Trong trường hợp của tôi, tôi sử dụng: jQuery UI - v1.9.2, và tôi chỉ có:

$this.sortable("destroy"); 

và tôi nhận được:

Lỗi không bắt buộc: không thể gọi các phương thức có thể sắp xếp trước khi khởi tạo; cố gắng gọi phương thức 'hủy diệt'

Và tôi cố định khi thêm xác nhận:

if ($this.data("ui-sortable")) 
{ $this.sortable("destroy"); } 
+0

tôi đã gặp khó khăn với một lỗi khác nhờ gợi ý –

0

Tôi đã có những lỗi tương tự, và probleme là thứ tự của mã !! bạn phải nhưng javascript của bạn sau khi mã html :).

0

Trong trường hợp của tôi có xung đột JS với Mootools (cổ điển Joomla, phải không?). Vì vậy, tôi đã đi đến main.js và thay đổi dòng này:

$(function() { 

với trang này:

jQuery(function ($) { 
+0

Bạn đã sửa đổi main.js nào? –

+0

@AalexGabi, tôi không nhớ nữa, nhưng bất kỳ tệp JS jQuery nào cũng không nên bắt đầu với $ khi bạn sử dụng Mootools và jQuery cùng nhau. Bạn nên xác định rằng bạn thực sự có nghĩa là $ là đối tượng jQuery. –

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