2013-05-21 20 views
5

Các công trình sau đây trong tất cả các trình duyệt ngoại trừ IE 9.0.8. Nó tải một mẫu khảo sát trong div với một yêu cầu ajax.JQuery không hoạt động trong IE 9.0.8, nhưng hoạt động với các công cụ dev mở

$('.tab-content').on('click', '.show_survey_form', function(e) { 
    e.preventDefault() 
    target = $(this).attr("data-target") 
    my_href = $(this).attr("href") 
    console.log("load: " + target + " target: " + my_href) 
    // load: #survey_response_form_33 target: /surveys/33/survey_responses/edit_multiple 

    // Don't make a request unless the form is opening. 
    if ($(this).hasClass('collapsed')) { 
    console.log("Making request!") 
    //$(target).load(my_href) 
    $(this).html(closeSurveyForm) // Just changes the language on the button 
    } else { 
    $(this).html(respondToSurvey) // Just changes the language on the button 
    } 
} 

.load được nhận xét trong khi gỡ lỗi. IE dường như có vấn đề khi sử dụng .hasClass trong ngữ cảnh này. Nó được sử dụng ở nơi khác mà không có vấn đề gì.

Phần thực sự kỳ lạ là thời điểm tôi mở cửa sổ công cụ dev, nó bắt đầu hoạt động. Nó liên tục không hoạt động trước đó, và luôn hoạt động sau khi nhấn F12.

Các sự cố khác đã cho biết phương thức hasClass không hoạt động khi lớp chứa \ r char nhưng đó không phải là trường hợp ở đây. Tôi đang sử dụng jQuery 1.8.3.

Cập nhật: Thay đổi href thành "#" và ghi URL vào tải dữ liệu không có hiệu lực. Vẫn hoạt động trong tất cả các trình duyệt ngoại trừ IE 9.0.8.

+0

chỉ để rõ ràng, nó hoạt động trong tất cả các trình duyệt ngoại trừ IE9.0.8. Điều đó có nghĩa là nó hoạt động trong các phiên bản khác của IE9? Điều gì về IE8 hoặc IE10? Đây có thực sự là phiên bản cụ thể như bạn ngụ ý hay chỉ là đây là phiên bản bạn đang thử nghiệm? – Spudley

+0

Tôi sẽ sẵn sàng đặt cược rằng đầu mối nằm trong bit mà bạn nói "nó hoạt động ngay sau khi tôi mở công cụ dev F12". Tôi nghĩ rằng đây là một trường hợp của vấn đề cũ của 'console.log' không hoạt động cho đến khi F12 được mở ra. Xem [câu hỏi này để có câu trả lời đầy đủ] (http://stackoverflow.com/questions/7742781/why-javascript-only-works-after-opening-developer-tools-in-ie-once/7742862#7742862) – Spudley

+0

Nó hoạt động trong IE8 và IE 10. Tôi chưa thử nghiệm với các phiên bản IE9 khác. – Archonic

Trả lời

12

Điều này không liên quan gì đến jQuery hoặc hasClass(). Nó hoàn toàn là do bạn sử dụng console.log().

Điều quan trọng là phải biết rằng IE không xác định đối tượng console cho đến khi cửa sổ công cụ dev F12 đã được mở.

Điều này có nghĩa là trước khi bạn mở ứng dụng, các cuộc gọi console sẽ ném javascript "lỗi không xác định đối tượng". Điều này sẽ làm cho nó xuất hiện rằng mã xung quanh nó không hoạt động, nhưng nó thực sự chỉ là một thực tế là các đối tượng giao diện điều khiển là mất tích.

Bạn có thể có các hiệu ứng tương tự trong các trình duyệt cũ, nhưng hầu hết các phiên bản trình duyệt hiện tại không làm điều này - chúng xác định đối tượng console ngay lập tức, bất kể công cụ dev có mở hay không. IE là ngoại lệ duy nhất.

Bạn có thể khắc phục điều này bằng cách (a) không sử dụng console trừ khi bạn đang thực sự gỡ lỗi và có các công cụ dev mở, hoặc (b) thêm một kiểm tra if(console) cho tất cả console cuộc gọi của bạn. Điều này sẽ ngăn chặn lỗi.

Thông tin thêm tại đây: Why does JavaScript only work after opening developer tools in IE once?

+0

Cảm ơn lời giải thích này, nó cũng giúp ích cho tôi :) – Kyle