2011-10-24 18 views
5

Mam problemy z uzyskaniem jednej z moich stron witryny za pomocą IE8. Działa dobrze w IE9, Safari (zarówno PC & Mac) & Firefox (Mac). Używam sekwencję find(tag1).html(tag1) rozmowę zrobić podstawienie tytuł, ale pojawia się następujący błąd w IE8 kiedy debugować go w skrypcie debugera IE, a to w html(tag2) funkcję:Błąd jQuery. Find(): "Nieoczekiwane wywołanie metody lub dostępu do właściwości"

Unexpected call to method or property access

Funkcja find(tag1) wydaje zwrócenie obiektu otaczającego (tj. #sidebar), a nie zagnieżdżonego obiektu #sidebarheader, co powoduje problemy podczas późniejszego wywoływania połączenia html(tag2).

Utworzyłem reprezentatywny przypadek testowy następująco:

<!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> 

A oto przypadek testowy jsFiddle:

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

czy ktoś sugestię, w jaki sposób uzyskać to do pracy w IE8?

Odpowiedz

1

< nagłówek > to znacznik HTML5, którego IE8 nie zna (jednak IE9 obsługuje ten znacznik). Ponieważ deklarujesz przejście XHTML 1.0, sugerowałbym użycie tagu <h1>, który będzie działał dobrze w IE8.

4

Aby wesprzeć nowe elementy HTML 5 w starszych wersjach IE (8 i niższych), istnieje przydatna sztuczka, która polega na utworzeniu fałszywego elementu przed uruchomieniem skryptu.

Po prostu wywołanie document.createElement('header'); na stronie rozwiąże problem, patrz here.

Dla pełnego wyjaśnienia, this post wykonuje przyjemną pracę polegającą na udzieleniu wyjaśnień.

Również, html5shiv to projekt, który rozwiązuje ten problem także w przypadku innych elementów.

Powiązane problemy