@wagwandude

Как передать в bind() корректный контекст?

Добрый вечер.

Уже второй час сижу, мучаюсь с контекстом, как его передать?
Конкретно в моем случае необходимо передать значение this для работы переключений в данном фрагменте:
var handler = function() {
    $("ul.tabs li").removeClass("active");
    $(this).addClass("active");
    $(".tab_content, .tab_test").hide();

    var activeTab = $(this).find("a").attr("class");
    $('.' + activeTab).show();
  }

  $("ul.tabs li").interval = setInterval(handler.bind(this), 1000);


Исходный код:
<ul class="tabs">
  <li><a href="javascript://" class="tab1">Tab 1</a></li>
  <li><a href="javascript://" class="tab2">Tab 2</a></li>
  <li><a href="javascript://" class="tab3">Tab 3</a></li>
</ul>

<div class="tab1 tab_content">1</div>
<div class="tab2 tab_content">2</div>
<div class="tab3 tab_content">3</div>

<div class="tab1 tab_test">ссылка 1</div>
<div class="tab2 tab_test">ссылка 2</div>
<div class="tab3 tab_test">ссылка 3</div>


$(document).ready(function() {

  $(".tab_content, .tab_test").hide();
  $("ul.tabs li:first").addClass("active").show();
  $(".tab_content:first, .tab_test:first").show();

  $("ul.tabs li").click(function() {
    $("ul.tabs li").removeClass("active");
    $(this).addClass("active");
    $(".tab_content, .tab_test").hide();

    var activeTab = $(this).find("a").attr("class");
    $('.' + activeTab).show();
    return false;
  });

  var handler = function() {
    $("ul.tabs li").removeClass("active");
    $(this).addClass("active");
    $(".tab_content, .tab_test").hide();

    var activeTab = $(this).find("a").attr("class");
    $('.' + activeTab).show();
  }

  $("ul.tabs li").interval = setInterval(handler.bind(this), 1000);

});


ul {
  height: 25px;
}

ul li {
  float: left;
  height: 25px;
  background-color: #333;
  margin: 0 5px 0 0;
}

ul li.active {
  background: red;
}

ul li a {
  text-decoration: none;
  color: #fff;
  margin: 2px 0 0 0;
  padding: 3px 10px 0 10px;
}

div.tab_content {
  background-color: #333;
  color: #fff;
}

div.tab_content p {
  padding: 10px;
}


Заранее большое спасибо!
  • Вопрос задан
  • 220 просмотров
Решения вопроса 1
no_one_safe
@no_one_safe
1. Вместо клика на < li> отлавливайте клик на < a>
2. У вас ссылки и контейнеры одинаковый класс содержат - tab1, лучше разделить.
3. В чем вопрос? Что у вас не получается? Чего вы хотите добиться?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы