2011-10-24 36 views
5

Tôi đang gặp một số vấn đề khi nhận một trong các trang trên trang web của mình bằng IE8. Nó hoạt động tốt trong IE9, Safari (cả PC & Mac) & Firefox (Mac). Tôi đang sử dụng một chuỗi find(tag1).html(tag1) gọi để làm một tiêu đề thay thế, nhưng tôi nhận được lỗi sau trong IE8 khi tôi gỡ lỗi nó trong kịch bản debugger IE, và điều này trong html(tag2) chức năng:Lỗi jQuery .find(): "Cuộc gọi hoặc phương thức truy cập thuộc tính không mong muốn"

Unexpected call to method or property access

Chức năng find(tag1) dường để trả về đối tượng kèm theo (ví dụ: #sidebar), chứ không phải đối tượng lồng nhau #sidebarheader và điều này gây ra sự cố khi sau đó thực hiện cuộc gọi html(tag2).

tôi đã tạo ra một trường hợp thử nghiệm đại diện như sau:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>JQuery .find() test case</title> 

    <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.js"></script> 
    <script type="text/javascript"> 
     function UpdateHeader() { 
      $('#sidebar').find('header').html("New Title"); // IE8, nesting div's in the find fct. will not discover the child div 
     } 

     document.ready = UpdateHeader; 
    </script> 
</head> 

<body> 
     <div style="height: 400px; width: 390px"> 

      <div id="jqm-home"> 
      <div id="page"> 
       <div id="sidebar"> 
        <div id="sidebarheader"> 
         <header>Old Title</header> 
        </div> 
       </div> 
      </div> 
      <p onclick="UpdateHeader();">Click to update title</p> 
      </div> 
     </div>  
</body>    
</html> 

Và đây là các trường hợp thử nghiệm jsFiddle:

http://jsfiddle.net/bnmcK/21/

Có ai một gợi ý về cách để có được điều này để làm việc trong IE8?

Trả lời

1

< tiêu đề > là thẻ HTML5 mà IE8 không biết (IE9 tuy nhiên, hỗ trợ thẻ này). Vì bạn đang khai báo chuyển tiếp XHTML 1.0, tôi khuyên bạn nên sử dụng thẻ <h1> thay thế, điều này sẽ hoạt động tốt trong IE8.

4

Để hỗ trợ các phần tử HTML 5 mới trong các phiên bản cũ hơn của IE (8 trở xuống), có một mẹo hữu ích, bao gồm việc tạo phần tử giả trước khi chạy tập lệnh của bạn.

Vì vậy, chỉ cần gọi document.createElement('header'); trong trang của bạn sẽ giải quyết được sự cố, xem here.

Để được giải thích đầy đủ, this post thực hiện một công việc tốt để cung cấp giải thích.

Ngoài ra, html5shiv cũng là một dự án giải quyết vấn đề này cho các yếu tố khác.

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