2013-07-26 27 views
8

Theo tài liệu (http://jquerymobile.com/demos/1.2.0/docs/api/events.html), sự kiện pageinit sẽ được gọi sau khi tất cả các tiện ích và plugin cho trang di động jQuery đã được thực thi. Vì vậy, tôi tin rằng tôi sẽ có thể tương tác với các yếu tố trên trang đó với khả năng miễn dịch trong sự kiện gọi lại. Tuy nhiên, tôi nghe cho trang để khởi tạo và sau đó cố gắng tương tác với một nút trên trang web, và tôi nhận được lỗi sau:lỗi di động jquery - không thể gọi các phương thức trên nút trước khi khởi tạo; cố gắng gọi phương thức 'disabled'

cannot call methods on button prior to initialization; attempted to call method 'disabled'

tôi đã đặt cùng một codepen, để cho bạn thấy:

http://codepen.io/mattsnider/pen/mvcbD

Điều gì mang lại? Tranginit không hoạt động như tài liệu hay là lỗi này?

Trả lời

24

Không có gì sai với sự kiện pageinit của bạn. Sai vị trí trong thẻ <a>.

Để loại bỏ các lỗi mà bạn đang nhận được, bạn sẽ phải thực hiện hai thay đổi mã của bạn:

  1. nó không disabled, nó disable
  2. trước khi cuộc gọi của bạn phương pháp disable, bạn phải gọi phương thức button(). Do đó, bạn đã khởi tạo phần tử button.

Đây là cách mã sẽ trông giống như bây giờ:

$('#ageNext').button().button('disable'); 

Nhưng, nếu bạn làm điều này, bạn sẽ nhận được một lỗi như thế này:

Uncaught TypeError: Cannot call method 'addClass' of undefined

Thủ phạm nằm trong mã gọi phương thức disable

disable: function() { 
    this.element.attr("disabled", true); 
    this.button.addClass("ui-disabled").attr("aria-disabled", true); 
    //^^ Uncaught TypeError: Cannot call method 'addClass' of undefined  
    return this._setOption("disabled", true); 
} 

Bạn thấy this.button ở đó? Điều này sẽ trở thành undefined nếu phần tử không phải là nút thực.

Vì vậy, nói rằng, tôi đã có disable để chỉ hoạt động trên input[type=button]<button/> loại yếu tố. Vì một số lý do, điều này không hoạt động như mong đợi trên <a/> các nút mạo danh. Tôi đã có để làm việc này bằng cách thủ công thêm ui-disabled lớp để nguyên tố này, như thế này:

$(document).on('pageinit', '#age', function (e) { 
    $('#ageNext').addClass('ui-disabled'); 
}); 

Demo: http://jsfiddle.net/hungerpain/gzAHT/

+0

Tâm boggling ... cảm ơn –

+1

Điều này dường như vẫn áp dụng trong jQuery Mobile 1.4.5. – Ken

0

này cũng có thể xảy ra nếu bạn có thẻ HTML chưa từng có, đặc biệt là gây phiền hà là </div> mà không có một trước đây đã khai báo <div>.

Điều đầu tiên cần kiểm tra có thể là HTML của bạn được tạo đúng.

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