2009-09-10 2 views
3

Ниже приведен пример jQuery, как получить ссылки внутри панели вкладок для загрузки внутри этой панели.Событие загрузки jquery tabs

$(function(){ 
    $('#example').tabs({ 
     load: function(event, ui) { 
      $('a', ui.panel).click(function() { 
       $(ui.panel).load(this.href); 
       return false; 
      }); 
     } 
    }); 
}); 

Однако линия $(ui.panel).load(this.href); не срабатывает событие Вкладки нагрузки так после загрузки одну ссылки остальных нормальные

причины я спрашиваю, потому что у меня есть вложенный аккордеон внутри моих закладок и я хочу для разбивки на страницы с помощью разбиения на страницы сервера, но когда я использую ссылки на страницы, он не будет переделывать аккордеон.

Я хочу что-то вроде этого

$(function(){ 
    $('#example').tabs({ 
     load: function(event, ui) { 
      $(".products", ui.panel).accordion(); 
      $(".product_link", ui.panel).colorbox(); 

      $('a', ui.panel).click(function() { 
       $(ui.panel).load(this.href); 
       return false; 
      }); 
     } 
    }); 
}); 

Это, кажется, чтобы получить меня почти нет, однако $(ui.panel).load(this.href) только не загружает его в первую панель независимо от того, на какой вкладке я нахожусь на

$(function(){ 
    $('#example').tabs({ 
     load: function(event, ui) { 
      $(".products", ui.panel).accordion(); 
      $(".product_link", ui.panel).colorbox(); 

      $('a', ui.panel).live('click',function() { 
       $(ui.panel).load(this.href,function(){ 
          $(".products").accordion(); 
          $(".product_link").colorbox(); 
         }); 
       return false; 
      }); 
     } 
    }); 
}) 

любые идеи?

ответ

1

Попробуйте это:

$(function(){ 
    $('#example').tabs({ 
     load: function(event, ui) { 
      $('a', ui.panel).live("click", function() { 
       $(ui.panel).load(this.href); 
       return false; 
      }); 
     } 
    }); 
}); 

Если я вас правильно, после того, как вы обновите содержимое с помощью $.load ссылки вы связанные обработчик щелчка, чтобы больше не делать то, что они должны. Это потому, что вы заменяете все эти ссылки через ваш вызов ajax, поэтому после того, как вы нажмете один, все они будут заменены и больше не будут привязываться к обработчику событий click.

jQuery.live предотвращает потерю связанного обработчика событий путем автоматического повторного прикрепления обработчиков событий к вновь введенным элементам, соответствующим вашему селектору. См:

http://docs.jquery.com/Events/live

EDIT: попробуйте повторно крепление аккордеона внутри $.load «s обратного вызова:

$(function(){ 
    $('#example').tabs({ 
     load: function(event, ui) { 
      $(".products", ui.panel).accordion(); 
      $(".product_link", ui.panel).colorbox(); 

      $('a', ui.panel).live("click", function() { 
       $(ui.panel).load(this.href, function() { 
        $(".products", ui.panel).accordion(); 
        $(".product_link", ui.panel).colorbox(); 
       }); 
       return false; 
      }); 
     } 
    }); 
}); 
+0

я знаю о реальном событии, но ссылки - это не единственная вещь, которую я хочу изменить, см. мои правки. – ErsatzRyan

+0

@ErsatzRyan - см. мое редактирование – karim79

+0

@ Karim79 - ваше редактирование близко к моему редактированию – ErsatzRyan

1

попробуйте использовать ui.tab.hash в случае нагрузки или выберите событие

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