Где 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, поэтому это переименование вместо удаления
Ответы
Ответ 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...
}
});