2013-01-13 6 views
21

mam this jsfiddleGdzie jest fn.toggle (program obsługi (eventObject), moduł obsługi (eventObject) ...)?

który wykorzystuje - nie można confued z toggle - jQuery wersji ustawiony EDGE

on nagle przestał działać i wyjął komórkę chciałem jako wyzwalacz, ponieważ oczywiście powraca do toggle.

nie mogę znaleźć żadnych tagów amortyzacyjne lub takiego

http://api.jquery.com/category/deprecated/ daje 404

Jeśli dodać moduł Migrate mój jsFiddle then works i widzę ostrzeżenie w konsoli (opracowanego przez https://github.com/jquery/jquery-migrate/blob/master/warnings.md jak wysłane przez Frédéric Hamidiego)

Widzę i issue 24 i Ticket #11786, ale nie w miejscach, w których mógłbym się spodziewać.

Czego mi brakuje i gdzie znajdę zamiennik i dokumentację?

UWAGA: Rozumiem powody zaniechania, ja po prostu nie mogę znaleźć oficjalnej dokumentacji dla amortyzacji

$('#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()); 
     } 
    }); 
    }  
); 

Code w migrować:

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); 
}; 

UPDATE Poprosiłem jeśli mogą zachować kod jako fn.toggler, więc jest to zmiana nazwy zamiast usunięcia

+1

Zgodnie z [bilet nr 11786] (http://bugs.jquery.com/ticket/11786) w [bugs.jquery.com] (http: // bugs .jquery.com) wydaje się, że zdarzenie [toggle event] (http://api.jquery.com/toggle-event/) jest przestarzałe/przestarzałe; ale masz rację, nie widzę tego na stronie [toggle event] (http://api.jquery.com/toggle-event/). Proponuję dodać komentarz do biletu. – Pang

+0

Zrobione, dziękuję ... – mplungjan

+0

Pamiętam, że słyszałem o tym krótko i byłem zdezorientowany, że nie został oznaczony w dokumentach frontendu jako przestarzały. –

Odpowiedz

8

można znaleźć oficjalną dokumentację toggle()'s deprecation w the list of warnings emitted by the jQuery Migrate plugin:

JQMIGRATE: jQuery.fn.toggle (obsługi, obsługi ...) jest przestarzała

przyczyna: Istnieją dwa zupełnie różne znaczenia dla metody .toggle() . Używanie .toggle() do pokazywania lub ukrywania elementów nie jest naruszone. Używanie .toggle() jako specjalistycznego modułu obsługi kliknięcia zostało wycofane w wersji 1.8 i usunięte w wersji 1.9.

Rozwiązanie: Przepisz kod, który zależy od $().toggle() użyj minified produkcyjną wersję wtyczki jQuery migrować do zapewnienia funkcjonalność lub wyodrębnić metodę ze źródła w pluginu $().toggle() i użyć go w aplikacji.

+0

Dzięki za wskazanie mi na to. Nie jest to jednak miejsce, w którym się tego spodziewałem. Czy w interfejsie API jest oficjalna deprecjacja, czy coś przegapiłem? Jak widzisz, już zastosowałem MIGRATE, ale nie znalazłem pliku .md, który się na nim rozwinął – mplungjan

+1

@mplungjan, niczego nie przegapiłeś, strona dokumentacji 'toggle()' nie została jeszcze zaktualizowana o te informacje. Dokumenty API właśnie zostały przebudowane/zaktualizowane, chociaż (teraz mówią, że 'then()' to na przykład 'pipe()', może 'toggle()' będzie częścią następnej partii. –

2

jQuery 1.9 nie jest jeszcze gotowy. Zgodnie z instrukcją aktualizacji:

"Na razie ten przewodnik stanowi załącznik do standardowej dokumentacji interfejsu API jQuery, a strony te mogą nie opisywać zachowania wersji 1.9.Prosimy o cierpliwość, aktualizując dokumentację poszczególnych stron na stronie api.jquery.com, aby odzwierciedlić zmiany w wersji 1.9. "

W tym przypadku nie udokumentowaliśmy tego jeszcze. ! Proszę złożyć bilet dokumentacji tutaj: http://github.com/jquery/api.jquery.com

1

kod, który używam:

$('#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... 
     } 
    }); 

zoptymalizowany kod (sugerują przez mplungjan) wynosi:

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

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

To nie jest zręczne. Możesz przełączać isCicked z! IsClicked, ale ktokolwiek używa twojego kodu, musi być świadomy, że przełączasz się przed testowaniem, więc jeśli ma być odwrotny od tego, czego byś się spodziewał. '$ (this) .data (" kliknięty ",! $ (this) .data (" kliknięty "));' – mplungjan

+0

piękny! Zwykle używam czytelnego kodu bez "kompresji". Dzięki! – Cuarcuiu

+0

Nie ma za co. Tylko uwaga: Twój kod obsługuje tylko DWA kliknięcia. Kod fn.toggle obsłużył DOWOLNE kliknięcia. Tak więc 5 lub 10 kliknięć lub cokolwiek innego może mieć inny wpływ na każde kliknięcie. – mplungjan

13

Wycofanie jquery .toggle() jest teraz udokumentowane na api.jquery.com. Znalazłem miły zamiennik dla niego na forum.jquery, którego teraz używam. Działa świetnie :)

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

Zastosowanie:

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

Edycja 6 sierpnia 2014 roku: I rozważyć oryginalny kod i okazało się, że .apply nie jest słuszne w użyciu. Zmieniono to na .call bez przekazanych argumentów.

+0

Skończyło się na dodaniu "this" do funkcji [iteration] .call (this); jak stary kod, którego używałem, odwoływał się do "tego" w procedurach obsługi przełączania –

Powiązane problemy