jQuery, AJAX và IE7

trong danh mục Web Programming

Hôm nay gặp cái bug thật là đáng ghét bởi vì IE7.
Như các bạn cũng biết mình sử dụng AJAX để load một phần trang web mà thồi (vd như mình dàn trang trong một thẻ div). Đối với một trang web bình thường, mình khai báo một chức năng jquery trong đoạn
$(document).ready(function()
{
...
});

ví dụ như thêm chức năng mouseover/mouseout cho một selector nào đó. Và các chức năng được khai báo sẽ được tự thực hiện đối với các selector(class/id) tìm được trong toàn bộ trang HTML.
Việc này diễn ra bình thường trong FF,IE6. Nhưng hôm nay, vì lý do test nên khi xài IE7 tự nhiên thấy sao không trigger được các chức năng được khai báo đối với các nội dung được load bởi AJAX.

Theo suy đoán, có lẽ IE7 khi sử dụng AJAX để load nội dung vào 1 thẻ (div chẳng hạn), thì nội dung này (DOM) sẽ không được jquery nhận ra các selector, do đó các chức năng của selector trong nội dung AJAX này sẽ không hoạt động.
Mình đã thử mang các hàm khai báo chức năng jquery này ra ngoài đoạn
$(document).ready(function()
{
...
});
mà mang vào load cùng với nội dung của AJAX, và đã thành công, ít ra là thành công thêm với IE7.
Một chút chia sẽ với các bạn.

6 bình luận

  1. LHLL says:

    Hi ban!
    cho minh hoi chut, minh cung dang gap rac roi giua ie6,ie7,ie8 va cac trinh duyet, minh code java, trong 1 ch/tr co su dung ajax thi tat ca cac trinh duyet deu chay chi tru ie7 va ie8 minh dung ietester debug thi no bao loi nhung chi hien cua so bao loi ko hien them 1 thong tin j khac nua, minh thu bug trong code javascript thi khi rao’ dong ” req.send(null); ” thi no khong bao loi nhung cung ko ra dc ket qua ++! minh da search nhung ko thay co j hay, ban co the giup minh chut ko!
    thanks!

    • admin says:

      Để debug trong IE thì hơi rắc rối, có thể dùng alert() để echo data từng bước, hoặc có thể sử dụng Debugbar (http://www.debugbar.com/) để cài một bộ tool web developer cho IE.

      Còn nếu vẫn không thấy gì và muốn coi dữ liệu ra vào ứng dụng thì có thể cài 1 cái HTTP Proxy trên máy để xem các request và response. Cái này có thể sử dụng Web Debugging Proxy (http://www.fiddler2.com/fiddler2/).

      Mình hy vọng những “đồ nghề trên có thể giúp bạn”. Chúc may mắn!

  2. Ken Phan says:

    chắc lúc bác viết bài này chưa có live() !

    • admin says:

      Nếu bạn đã có chia sẽ thì cho thêm chút thông tin đi. Mình cũng không biết nó là gì luồn ^^

  3. Ken Phan says:

    đọc bài viết của bạn 1 hồi mình không hiểu là bạn nói gì … không biết có phải thế này không ?

    $(document).ready(function(){
    $(‘a’).click(function(){
    $(‘#test’).append(‘Click me‘);
    });
    });

    Click me

    Chắc có lẽ là những tag a element sau khi được append vào stage sẽ không nhận được event click kia ? Nếu vậy thì bạn thử sử dụng live() event xem sao !

    $(‘a’).live(‘click’, function(){ … }

    Nếu không đúng ý bạn thì bỏ qua nhé 😀

  4. vu duc viet says:

    Uhm! IE trở thành nỗi kinh hoàng của tui! Trong khi càng lúc càng nhiều ứng dụng Jquery thật pro đem vào gặp phải thằng IE là dân design phải fix liên hồi! Nhiều lúc nhức đầu không lối thoát để rồi phải chọn phương án khác, bỏ dở cả công trình tâm huyết!
    Mình nghĩ không phải Microsoft không có khả năng fix IE mà Microsoft cố tình để lại cái lỗi nó nhằm phát triển một Soft Browse mang tính độc quyền kèm theo Windows.
    Còn cách khắc phục các selector thì đến đoạn nào cần mình cứ khai document.getElementBy… cho chắc! Nó có thể đi kèm Jquery mà

Gởi bình luận