2011-03-12 30 views
6

Tôi đang cố gắng ràng buộc một sự kiện cho tất cả các hộp thoại đã được tạo trên một trang bằng cách sử dụng chức năng Hộp thoại Giao diện người dùng JQuery (cho dù chúng đã được hiển thị hay chưa). Tôi không thể hình dung ra một công cụ chọn sẽ đưa tôi đến đó. Tôi đã thử cả hai .ui-dialog.ui-dialog-content mà không thành công.Cách tìm tất cả các hộp thoại trong JQuery

Vì tôi đang cố gắng tạo một phương pháp chung, tôi sẽ không biết ID của các hộp thoại có thể đã được tạo.

Tôi đang sử dụng mã sau để kiểm tra. Nó hoạt động nếu tôi chỉ định id của một hộp thoại (#mydialog), nhưng trong sản xuất, tôi sẽ không biết điều này.

$("div.ui-dialog").bind("dialogclose", function(event, ui) { 
    window.alert("close fired"); 
} 

Trả lời

7

Hộp thoại của bạn có lớp chung mà bạn có thể chọn không? Nếu tất cả họ đều có lớp "ui-thoại" thì điều này sẽ làm việc:

$(".ui-dialog") 

dụ bạn của

$("div.ui-dialog") 

Được hỏi để chọn tất cả các div với một lớp ui-thoại, trong đó nên có lẽ cũng làm việc miễn là lớp được gán cho một phần tử div.

Sự cố của bạn có thể là bạn ràng buộc các phần tử hộp thoại trước khi chúng tồn tại? Bạn có thể muốn hàm .live() thay thế để nó liên kết với bất kỳ hộp thoại nào được tạo tại bất kỳ điểm nào và không chỉ là các hộp thoại tồn tại khi hàm được gọi.

Đăng một đoạn mã HTML sẽ hữu ích.

+0

thay đổi cuộc gọi đến .live() giải quyết vấn đề Để tham khảo trong tương lai, lớp ui-thoại được thêm vào (và một vài người khác trong ứng dụng của tôi!) bởi giao diện người dùng JQuery, do đó, mã ở trên, với thay đổi thành live() thay vì bind() là chung và sẽ hoạt động ở bất kỳ đâu. –

2

Bạn có thể sử dụng này:

$(":ui-dialog").each(function(){ 
    "enter your code here" 
}) 
+0

phải là. thay vì: –

+1

Tôi không biết vì tôi ".ui-dialog" không chạy, nhưng chỉ ": ui-dialog" – Charlestown

+0

Công trình này tuyệt vời. Việc chọn theo lớp nên hoạt động bình thường, nhưng không đảm bảo rằng chỉ các hộp thoại được sử dụng. Đây là một jQuery-meta-selector, (như: visible), được đảm bảo khá nhiều để có được tất cả các hộp thoại và không có gì khác. –

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