2011-05-31 46 views
5

Trong khi chạy trang web của tôi, tôi tạo các div mới bằng cách sử dụng jquery với lớp "a". Tôi đã xác định hàm click() cho lớp "a" như sau:click() chức năng jquery không có sẵn trên divs mới

$(document).ready(function() { 
    $(".a").click(function(){ 
     $(".a").hide(); 
    }); 
}); 

Vấn đề là các div mới được tạo với cùng một lớp không gọi hàm này khi được nhấp. Các div khác với lớp "a" có lúc bắt đầu làm. Tôi đang làm gì sai?

Trả lời

4
$(document).delegate('.a', 'click', function() { 
    $(this).hide(); 
}); 
+0

Tuyệt vời, thanx! – Nayish

+1

+1 để sử dụng 'delegate()' thay vì 'live()', mặc dù trong trường hợp này chúng hầu như không khác nhau. –

+1

Điều quan trọng cần lưu ý là bộ chọn mà bạn gọi là '.delegate' từ phải gần với người bạn muốn ủy quyền càng tốt. –

3

Hãy thử sử dụng các chức năng .live() mà cũng nên áp dụng cho các yếu tố DOM mới chèn phù hợp với chọn của bạn:

$(document).ready(function() { 
    $(".a").live('click', function(){ 
     $(".a").hide(); 
    }); 
}); 
+2

Vui lòng không hỗ trợ việc sử dụng 'live()'. Đó là một sai lầm đáng tiếc. Vui lòng sử dụng 'delegate()' thay thế; -1 –

+0

Điều này đã gửi cho tôi một Googling, đã bật lên câu hỏi và câu trả lời này về lý do tại sao 'delegate()' có thể tốt hơn 'live()': http://stackoverflow.com/questions/4204316/jquery-live- vs-delegate – marramgrass

-1

Sử dụng phương pháp "sống".

http://api.jquery.com/live/

+1

Vui lòng không hỗ trợ việc sử dụng 'live()'. Đó là một sai lầm đáng tiếc. Vui lòng sử dụng 'delegate()' thay thế; -1 –

2

này cũng có thể làm việc.

(function($) { 
    $(document).ready(function() { 
    $('body').on('click', '.a', function() { 
     $(this).hide(); 
    }); 
    }); 
}(jQuery)); 

.on() gắn các sự kiện vào các điều khiển hiện tại và chưa có.

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