2009-10-01 3 views
22

Tôi đang sử dụng jQuery và có một số tương tác với một giao diện người dùng jQuery, nơi tôi cần có các tùy chọn. Tuy nhiên có khả năng là chức năng giao diện người dùng jQuery chưa được áp dụng cho đối tượng DOM. Tôi nhận được một lỗi JavaScript ngay bây giờ khi tôi truy cập một tùy chọn.Cần biết liệu một Widget UI của jQuery đã được áp dụng cho một đối tượng DOM

Tôi có đối tượng DOM có thanh tiến trình (http://docs.jquery.com/UI/Progressbar) được đính kèm với nó (có thể). Trong một chủ đề khác, tôi đang cố truy cập các tùy chọn bằng cách sử dụng domObj.progressbar("option", "value").

Làm cách nào để xác định xem điều đó có domObj có đính kèm progressbar không?

Trả lời

3

Đối tượng DOM sẽ nhận thêm lớp CSS được thêm vào: "ui-progressbar". Nếu bạn xem nguồn trên http://docs.jquery.com/UI/Progressbar thì bạn có thể thấy một div có id = progressbar và không có gì khác, nhưng nếu bạn sử dụng Firebug và bấm vào phần tử bạn có thể thấy nó có thêm một vài lớp được thêm vào.

Đã chỉnh sửa: Tôi nghĩ rằng giải pháp @ jamiebarrow là giải pháp chính xác hơn ở đây.

+0

Ok, trên widget ui tùy chỉnh của tôi, tôi sẽ chỉ cần thêm một lớp học để các đối tượng dom và kiểm tra cho nó. Cảm ơn một loạt các ý tưởng – DMCS

23

Bạn có thể truy cập vào đối tượng thanh tiến trình trên phần tử bằng cách thực hiện:

$("#myid").data("progressbar") 

Vì vậy, để sử dụng này:

var progressBar = $("#myid").data("progressbar"); 
if (progressBar == null) { 
    // handle case when no progressbar is setup for my selector 
} else { 
    alert("The value is: " + progressBar.value()); 
} 
+1

Tôi nghĩ rằng cách này là thanh lịch hơn so với gợi ý của colinramsay. Nó cũng có thể áp dụng cho các plugin khác lưu trữ 'các đối tượng API' của chúng bằng cách sử dụng hàm dữ liệu jQuery. Và sử dụng giao diện điều khiển Firebug để kiểm tra xem $ ("# myid"). Dữ liệu() trả về rất hữu ích :) – jamiebarrow

2

Tôi thích sử dụng hasOwnProperty trên bất kỳ đối tượng trong JavaScript, vì nó trả về một boolean mỗi lần.

var hasWidget = $("selector-here").data().hasOwnProperty("widget-name-here"); 
if (hasWidget) 
{ 
    // Put your awesome code here. 
} 

IMHO nào tốt hơn một chút so với kiểm tra null; những gì nếu nó chuyển sang không xác định, trong đó, cũng IMO là những gì nó sẽ trở lại.

+0

Suy nghĩ thứ hai, tôi thực sự sẽ giữ mã của tôi theo cách hiện tại, nhưng thay vì kiểm tra sự thật/falsy value of progressBar (thay vì có 'if (! progressBar)'). Nó có ý nghĩa với tôi rằng tôi chuyển một tham số tới 'data()' và lấy lại một đối tượng. Có lẽ cũng có thể kiểm tra loại của nó là một đối tượng, nhưng tôi không biết, có vẻ như rất nhiều kiểm tra cho một cái gì đó là khá tốt được xác định ... đoán nó phụ thuộc;) – jamiebarrow

10

Theo this discussion, cách khuyến khích để phát hiện nếu một widget đã được trả lại vào một yếu tố như sau:

var hasWidget = $('selector').is(':ui-widgetname'); 
+0

Điều tương tự Colin nói cách trở lại trong năm 2009 trong câu trả lời tôi chấp nhận . Tuy nhiên, mã của bạn rất ngắn gọn. – DMCS