Подтвердить что ты не робот

Где fn.toggle(обработчик (eventObject), обработчик (eventObject)...) ушел?

У меня этот jsfiddle

который использует toggle event - не следует использовать toggle - версия jQuery установлена ​​на EDGE

Он внезапно прекратил работу и удалил ячейку, которую я хотел в качестве триггера, так как она, очевидно, возвращается к toggle.

Я не могу найти никаких тегов устаревания или таких

http://api.jquery.com/category/deprecated/ дает 404

Если я добавлю Migrate модуль jsFiddle, то работает и я вижу предупреждение в консоли (разработанное https://github.com/jquery/jquery-migrate/blob/master/warnings.md, как опубликовано Frédéric Hamidi)

Я вижу Отменить fn toggle и issue 24 и Ticket # 11786, но не в местах, которые я ожидал бы увидеть.

Что мне не хватает и где я могу найти замену и документацию?

ПРИМЕЧАНИЕ. Я понимаю причину устаревания, я просто не могу найти официальную документацию для устаревания

$('#tbl .xx').toggle(
  function() {
    $(this).siblings().each(function(){
      var t = $(this).text();
      $(this).html($('<input />',{'value' : t}));
    });
  },
  function() {
    $(this).siblings().each(function(){
      var inp = $(this).find('input');
      if (inp.length){
        $(this).text(inp.val());
      }
    });
  }    
);

Код в MIGRATE:

jQuery.fn.toggle = function( fn, fn2 ) {
  // Don't mess with animation or css toggles
  if ( !jQuery.isFunction( fn ) || !jQuery.isFunction( fn2 ) ) {
    return oldToggle.apply( this, arguments );
  }
  migrateWarn("jQuery.fn.toggle(handler, handler...) is deprecated");
  // Save reference to arguments for access in closure
  var args = arguments,
  guid = fn.guid || jQuery.guid++,
  i = 0,
  toggler = function( event ) {
    // Figure out which function to execute
    var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
    jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
    // Make sure that clicks stop
    event.preventDefault();
    // and execute the function
    return args[ lastToggle ].apply( this, arguments ) || false;
  };
  // link all the functions, so any of them can unbind this click handler
  toggler.guid = guid;
  while ( i < args.length ) {
    args[ i++ ].guid = guid;
  }
  return this.click( toggler );
};

ОБНОВЛЕНИЕ Я спросил, могут ли они сохранить код как fn.toggler, поэтому это переименование вместо удаления

4b9b3361

Ответ 1

Вы можете найти официальную документацию о toggle() debrecation в список предупреждений, выпущенных плагином jQuery Migrate:

JQMIGRATE: jQuery.fn.toggle(обработчик, обработчик...) устарел

Причина: Для .toggle() существуют два совершенно разных значения: метод. Использование .toggle() для отображения или скрытия элементов не затрагивается. Использование .toggle() в качестве специализированного обработчика кликов было устаревшим в 1.8 и удаляется в 1.9.

Решение: Перепишите код, который зависит от $().toggle(), используйте миниатюрная версия для версии плагина jQuery Migrate для обеспечения функциональность или извлечение метода $().toggle() из plugin source и использовать его в приложении.

Ответ 2

Устаревание jquery.toggle() теперь зарегистрировано в api.jquery.com. Я нашел хорошую замену для него в forum.jquery, который я сейчас использую. Он отлично работает:)

$.fn.toggleClick = function() {
  var functions = arguments,
      iteration = 0;
  return this.click(function() {
    functions[iteration].call();
    iteration = (iteration + 1) % functions.length;
  });
}

Использование:

$("#target").toggleClick(function() {
  alert( "First handler for .toggle() called." );
}, function() {
  alert( "Second handler for .toggle() called." );
});

Edit 6 августа 2014 года. Я пересмотрел исходный код и обнаружил, что .apply не подходит для использования. Изменено это на .call без аргументов.

Ответ 3

jQuery 1.9 еще не окончательный. В соответствии с руководством по обновлению:

"На данный момент это руководство служит приложением к стандартной документации API jQuery, и эти страницы могут не описывать поведение версии 1.9. Будьте терпеливы, пока мы обновляем документацию для отдельных страниц на api.jquery.com чтобы отразить изменения в 1.9.

В этом случае мы еще не документировали его. Вы так народ быстрее нас! Пожалуйста, напишите здесь билет документации: http://github.com/jquery/api.jquery.com

Ответ 4

Код, который я использую:

$('#example').click(function()
    {
    isClicked=$(this).data('clicked');
    if (isClicked) {isClicked=false;} else {isClicked=true;}
    $(this).data('clicked',isClicked);

    if(isClicked)
        {
        ...do stuff...
        }
    else
        {
        ...do stuff...
        }
    });

Оптимизированный код (предложение mplungjan):

$('#example').click(function()
    {
    $(this).data('clicked',!$(this).data('clicked'));

    if ($(this).data('clicked'))
        {
        ...do stuff...
        }
    else
        {
        ...do stuff...
        }
    });