jQueryUI Вкладки показать () на конкретной вкладке? - PullRequest
0 голосов
/ 07 октября 2011

Я проверял все, но, кажется, не могу найти, как заставить событие show () реагировать только на определенную вкладку?

У меня есть следующая вкладка:

<div id='tabs' class='ui-tabs'>
  <ul class='ui-tabs-nav'>
    <li><a href='#tabs-1'>tab 1</a></li>
    <li><a href='#tabs-2'>tab 2</a></li>
    <li><a href='#tabs-3'>tab 3</a></li>
  </ul>

  <div id='tabs-1'></div>
  <div id='tabs-2'></div>
  <div id='tabs-3'></div>
</div>

И я хочу, чтобы событие show () реагировало только на показ идентификатора 1. Возможно ли это?:)

Мой JS:

$(function() { 
  $('#tabs').tabs({
    cookie: {expires: 1}, 
    show: function(event, ui) {
      $('#campaigns-attached').delegate('li', 'dblclick', function() { $('#campaigns-non-attached').append(this); var id = this.getAttribute('id'); campaignsAttachRemove(id); });
      $('#campaigns-non-attached').delegate('li', 'dblclick', function() { $('#campaigns-attached').append(this); var id = this.getAttribute('id'); campaignsAttachThis(id); });
      $('#users-attached').delegate('li', 'dblclick', function() { $('#users-non-attached').append(this); var id = this.getAttribute('id'); usersAttachRemove(id); });
      $('#users-non-attached').delegate('li', 'dblclick', function() { $('#users-attached').append(this); var id = this.getAttribute('id'); usersAttachThis(id); });
    }
  }).disableSelection();
});

usersAttachThis () и usersAttachRemove () являются функциями обратного вызова AJAX.Поэтому, если я перехожу на вкладку и затем возвращаюсь на вкладку, где мне нужна функция делегата (), она отреагирует 3 раза.

Так что мне нужно сказать что-то вроде

if (tabSelected == "tabs-1") {
  $('#users-attached').delegate('li', 'dblclick', function() { $('#users-non-attached').append(this); var id = this.getAttribute('id'); usersAttachRemove(id); });
  $('#users-non-attached').delegate('li', 'dblclick', function() { $('#users-attached').append(this); var id = this.getAttribute('id'); usersAttachThis(id); });
}

ИЛИ, найти другой, чтобы сделать это, вместо делегата ()?

Ответы [ 2 ]

1 голос
/ 07 октября 2011

Если бы это было возможно, и я почти уверен, что это не так, это нарушило бы согласованность компонента. Вместо этого, почему у вас нет события "show", вызовите функцию в вашем скрипте, такую ​​как "fauxShow" и в "fauxShow" проверьте, выбрана ли вкладка с id = "1", а затем вызовите функцию "realShow".

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

0 голосов
/ 13 октября 2011
$(function() { 
  $('#tabs').tabs({
    cookie: {expires: 1}, 
    show: function(event, ui) {
      $('#campaigns-attached').undelegate('li', 'dblclick');
      $('#campaigns-attached').delegate('li', 'dblclick', function() { $('#campaigns-non-attached').append(this); var id = this.getAttribute('id'); campaignsAttachRemove(id); });
      $('#campaigns-non-attached').undelegate('li', 'dblclick');
      $('#campaigns-non-attached').delegate('li', 'dblclick', function() { $('#campaigns-attached').append(this); var id = this.getAttribute('id'); campaignsAttachThis(id); });
      $('#users-attached').undelegate('li', 'dblclick');
      $('#users-attached').delegate('li', 'dblclick', function() { $('#users-non-attached').append(this); var id = this.getAttribute('id'); usersAttachRemove(id); });
      $('#users-non-attached').undelegate('li', 'dblclick');
      $('#users-non-attached').delegate('li', 'dblclick', function() { $('#users-attached').append(this); var id = this.getAttribute('id'); usersAttachThis(id); });
    }
  }).disableSelection();
});

Я нашел ответ :) Просто используйте опцию undelegate (), прежде чем использовать делегат ().Тогда он не выстрелит дважды.

...