2013-05-09 4 views
0

У меня есть код js, работающий с jquery 1.7.1 после миграции до 1.9.1 Вы можете увидеть эту проблему на http://jsfiddle.net/QK5Ld/2/.Миграция кода дерева меню из jquery 1.7.1 в 1.9.1

код, я использую это:

$("#navigation li ul").each(function(){ 
    var that = this; 
    $(this).hide(); 
    $(this).prev().toggle(function() { 
           $(that).show(); 
          }, 
          function() { 
           $(that).hide(); 
          } 
        ); 
}) 

Я прочитал, что переключатель() больше не поддерживается, но я не эксперт JS и я потерял много времени, пытаясь завершить обновление этого Js код.

Любая идея? Спасибо заранее.

Nicola.

Примечание: HTML используется так:

<div id="navigation"> 
    <ul> 
     <li id="category-2850"> 
     <a href="/category/archiviazione/">ARCHIVIAZIONE</a> 
     <ul> 
      <li id="category-3021"> 
       <a href="/category/archiviazione/archiviazione-modulare/">ARCHIVIAZIONE MODULARE</a> 
       <ul> 
        <li id="category-3326"><a href="/category/archiviazione/archiviazione-modulare/scatole-archivio-con-maniglie/">SCATOLE ARCHIVIO CON MANIGLIE</a></li> 
        <li id="category-3022"><a href="/category/archiviazione/archiviazione-modulare/scatole-archivio-in-cartone/">SCATOLE ARCHIVIO IN CARTONE</a></li> 
       </ul> 
      </li> 
      <li id="category-2876"> 
       <a href="/category/archiviazione/buste-trasparenti/">BUSTE TRASPARENTI</a> 
       <ul> 
        <li id="category-2917"><a href="/category/archiviazione/buste-trasparenti/buste-a-perforazione-universale/">BUSTE A PERFORAZIONE UNIVERSALE</a></li> 
        <li id="category-2916"><a href="/category/archiviazione/buste-trasparenti/buste-a-u/">BUSTE A U</a></li> 
        <li id="category-2877"><a href="/category/archiviazione/buste-trasparenti/buste-per-usi-diversi-e-dedicati/">BUSTE PER USI DIVERSI E DEDICATI</a></li> 
       </ul> 
      </li> 
     </ul> 
     </li> 
     <li id="category-3100"> 
     <a href="/category/arredamento-e-complementi/">ARREDAMENTO E COMPLEMENTI</a> 
     <ul> 
      <li id="category-3101"> 
       <a href="/category/arredamento-e-complementi/complementi-d-arredo/">COMPLEMENTI D'ARREDO</a> 
       <ul> 
        <li id="category-3102"><a href="/category/arredamento-e-complementi/complementi-d-arredo/accessori-vari/">ACCESSORI VARI</a></li> 
        <li id="category-3215"><a href="/category/arredamento-e-complementi/complementi-d-arredo/appendiabiti/">APPENDIABITI</a></li> 
        <li id="category-3307"><a href="/category/arredamento-e-complementi/complementi-d-arredo/cestini-e-posacenere/">CESTINI E POSACENERE</a></li> 
        <li id="category-3189"><a href="/category/arredamento-e-complementi/complementi-d-arredo/lampade-da-tavolo/">LAMPADE DA TAVOLO</a></li> 
        <li id="category-3214"><a href="/category/arredamento-e-complementi/complementi-d-arredo/lampade-da-terra/">LAMPADE DA TERRA</a></li> 
        <li id="category-3217"><a href="/category/arredamento-e-complementi/complementi-d-arredo/orologi-barometri-da-scrivania-e-da-parete/">OROLOGI - BAROMETRI DA SCRIVANIA E DA PARETE</a></li> 
        <li id="category-3336"><a href="/category/arredamento-e-complementi/complementi-d-arredo/piante-sintetiche-e-vasi/">PIANTE SINTETICHE E VASI</a></li> 
        <li id="category-3216"><a href="/category/arredamento-e-complementi/complementi-d-arredo/portaombrelli/">PORTAOMBRELLI</a></li> 
        <li id="category-3173"><a href="/category/arredamento-e-complementi/complementi-d-arredo/tappeti-e-zerbini/">TAPPETI E ZERBINI</a></li> 
        <li id="category-3328"><a href="/category/arredamento-e-complementi/complementi-d-arredo/tavolini-e-sedie-zona-ristoro/">TAVOLINI E SEDIE ZONA RISTORO</a></li> 
       </ul> 
      </li> 
     </ul> 
     </li> 
    </ul> 
</div> 
+1

Попробуйте добавить плагин JQuery Migrate (http://jquery.com/upgrade-guide/1.9/#jquery-migrate-plugin) и посмотреть, что говорит консоль. – j08691

+0

Для краткосрочного исправления вы можете использовать библиотеку jquery-migrate, которая возвращает все устаревшие функции, которые были удалены в jquery 1.9. – Spudley

ответ

3

Ваш код действительно становится чище в версии 1.9:

$("#navigation li ul").each(function(){ 
    var that = this; 
    $(this).hide().prev().click(function(e) { 
     e.preventDefault(); 
     $(that).toggle(); 
    }); 
}); 

Хотя это работало бы точно так же и в предыдущих версиях тоже.

Update: вот еще лучший способ:

$("#navigation li ul").hide().prev().click(function(e){ 
    e.preventDefault(); 
    $(this).next().toggle(); 
}); 

jsfiddle

+1

Интересно, почему «href» якоря не соблюдался в его скрипке, если он не использовал «preventDefault» или что-то еще. На ваших работах, но ссылка соблюдается. – RaphaelDDL

+1

@RaphaelDDL Из документов на '.toggle':' Реализация также вызывает .preventDefault() в событии, поэтому ссылки не будут выполняться, и кнопки не будут нажаты, если на элемент был вызван .toggle(). ' –

+0

@ColinDeClue Спасибо. Благодаря вам я искал и отметил, что есть две страницы для 'toggle', в зависимости от того, используете ли вы [анимацию] (http://api.jquery.com/toggle/) или [event] (http: // api .jquery.com/toggle-event /) – RaphaelDDL

Смежные вопросы