2010-03-10 39 views
5

Tôi đang triển khai trình duyệt cây bằng HTML. Khi nhấp vào một nút, tôi gọi một hàm bổ sung các phần tử con của nút. Càng xa càng tốt. Bây giờ tôi muốn ngay lập tức gọi trình xử lý nhấp chuột của một trong các phần tử con để mở rộng quá trình đó. Vấn đề của tôi là jQuery không thể tìm thấy các phần tử con vừa được thêm vào. Khi tôi bước qua trong trình gỡ rối, mã của tôi để tìm các phần tử đang được gọi trước khi các phần tử mới được trình duyệt hiển thị, điều mà tôi đoán là vấn đề.Không thể tìm thấy các phần tử HTML được thêm động bằng cách sử dụng jQuery

Có một số sự kiện tôi có thể đợi (tương tự như tải trọng có thể) đánh dấu khi HTML mới được thêm vào không? Hoặc một phương pháp tôi có thể gọi để buộc việc dựng hình diễn ra sớm hơn? Mọi đề nghị sẽ được hoan nghênh.

Lưu ý: Tôi đã nhận ra rằng vấn đề hoàn toàn là lỗi của tôi, không phải của trình duyệt hoặc của jQuery. Xin vui lòng xem câu trả lời của tôi dưới đây.

+0

Một số mã sẽ là hữu ích để giúp bạn. –

+0

Bạn có thể thêm một số mã có vấn đề để giúp đưa ra giải pháp cụ thể hơn không? – deceze

Trả lời

1

Tôi đã giải quyết vấn đề cuối cùng bằng cách sử dụng setTimeout() để trì hoãn mã của tôi cho đến khi các phần tử mới được hiển thị. Không phải là một giải pháp lý tưởng mặc dù, như thời gian timeout tôi đã chọn là khá tùy ý.

Tôi đã đến đáy của nó. Hàm tôi gọi là đã thêm HTML đang thực hiện nó một cách không đồng bộ qua một cuộc gọi lại. Vì vậy, khi tôi đang cố gắng tìm các phần tử HTML mới, chúng thực sự chưa có ở đó. Tôi bây giờ đã thay đổi mã của tôi để gọi lại cũng chịu trách nhiệm xử lý các yếu tố mới được thêm vào, do đó đảm bảo rằng họ sẽ có mặt.

10

Bạn có thể sử dụng .live() for this, giàn xử lý nhấp chuột của bạn để nó thay vì chỉ .click() như thế này:

$(document).ready(function() { 
    //instead of $(".myTreeNode").click(.... 
    $(".myTreeNode").live('click', function() { 
    //Do stuff 
    }); 
}); 

Một .click() liên kết xử lý sự kiện cho các yếu tố mà nó tìm thấy khi nó thực hiện, vì vậy yếu tố mới don' t có người xử lý. .live() thay vì lắng nghe ở cấp DOM cho các nhấp chuột để bong bóng lên, do đó, nó không quan trọng nếu họ đang thêm bây giờ hoặc sau đó. Trong trường hợp có nhiều phần tử, bạn cũng có trình xử lý sự kiện thay vì 1 cho mọi phần tử, sau một vài phần tử, điều này cũng trở nên hiệu quả hơn.

+0

Tôi đã thử điều đó nhưng không khắc phục được. Vấn đề là HTML mới được thêm vào dường như không thể truy cập được với jQuery cho đến khi nó được hiển thị và vẫn còn trong tương lai. –

+0

@Charles - Bạn có đang làm gì đó ngoài việc liên kết sự kiện nhấp chuột không? các nhấp chuột phải được xử lý bởi 'live()' hoặc '.delegate()' nếu bạn muốn địa phương đó có nhiều địa phương hơn. –

2

"sống" bị phản đối từ jquery 1.7+ rất Hãy thử điều này,

$(document).on("click","#Cancel" , function(){ 
//do something 
}); 

Visit http://api.jquery.com/on/ để biết thêm thông tin

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