2010-09-13 41 views
6

Tôi đã thử nghiệm với parent() và gần nhất(), không có hàm nào hoạt động trong hàm.jQuery - parent() không hoạt động trong hàm gọi lại

TD giữ nguyên, không thay đổi sử dụng phương pháp này:

$.get('form.php', function(data){ 
    alert(data); 
    $(this).closest('td').html('Done!'); 
}); 

TD được cập nhật, phương pháp này hoạt động:

$.get('form.php', function(data){ 
    alert(data); 
}); 
$(this).closest('td').html('Done!'); 

bạn có thể vui lòng giúp tôi tìm ra lý do tại sao không closest('td') không hoạt động trong chức năng gọi lại?

Trả lời

6

this bên trong hàm gọi lại có phạm vi khác so với this ở bên ngoài. Bạn cần phải làm một cái gì đó như thế này:

var self = this; 
$.get('form.php', function(data) { 
    alert(data); 
    $(self).closest('td').html('Done!'); 
}); 

Bạn có thể sử dụng jQuery .proxy()-function để đạt được hiệu quả mong muốn, quá, giống như patrick dw chỉ ra trong bài viết của mình. Tôi khuyên bạn nên đọc qua số this document.

+0

Nhanh và hiệu quả! Tôi không biết rằng 'this' hoạt động khác bên trong một $ .get, một bài học khác để học. Cảm ơn cả hai người! –

+0

'this' hoạt động khác nhau bên trong các chức năng khác nhau. JavaScript có phạm vi chức năng. 'this' trỏ đến ngữ cảnh/phạm vi hiện tại. – jwueller

3

Bạn có thể sử dụng jQuery's $.proxy method cho đối số thứ hai cho $.get() để giữ lại giá trị mong muốn là this.

$.get('form.php', $.proxy(function(data) { 
    alert(data); 
    $(this).closest('td').html('Done!'); 
}, this)); 
Các vấn đề liên quan