event.returnValue jest nieaktualny. Zamiast tego użyj standardowego event.preventDefault ()

222

Mam ten skrypt:

<script>
$(document).ready(function () {
    $("#changeResumeStatus").click(function () {
        $.get("{% url 'main:changeResumeStatus' %}", function (data) {
            if (data['message'] == 'hidden') {
                $("#resumeStatus").text("скрыто");
            } else {
                $("#resumeStatus").text("опубликовано");
            }
        }, "json");
    });
});
</script>

W konsoli Google Chrome pojawia się następujący błąd:

event.returnValue jest nieaktualny. Zamiast tego użyj standardowego event.preventDefault ().

Używam jQuery v1.10.2 i #changeResumeStatusjest <span>.

Co jest nie tak z moim skryptem?

Alex Parakhnevich
źródło
19
Myślę, że to nie błąd, a jedynie ostrzeżenie - to można bezpiecznie zignorować.
Qantas 94 Heavy
32
To ostrzeżenie jest następstwem ostatniej aktualizacji chrome, nie martw się
A. Wolff,
2
Powinieneś spojrzeć na uciekające łańcuchy nie-ascii.
Gleno,
4
@AlexParakhnevich Nie ma jednego ważnego powodu, aby to zrobić, ale kilka mniejszych, które pełzają od czasu do czasu. Szczerze mówiąc, moja reakcja była raczej instynktowna niż przemyślana. W projektach, nad którymi teraz pracuję, istnieje wskazówka, aby nie używać znaków nie-ascii w literałach, które wprowadziłem w przeszłości, ponieważ niektóre narzędzia zewnętrzne (kompilator maszynowy) dławiły się przy takich danych wejściowych. W większości przypadków działa wystarczająco dobrze, ale czasami pochłania dużo czasu programisty, gdy coś idzie nie tak. W każdym razie .empty().append("text")lepiej to wyrazić jako .text("text").
Gleno,
1
@Gleno dzięki za udostępnienie
Alex Parakhnevich

Odpowiedzi:

204

Jest to tylko ostrzeżenie: kod nadal działa, ale prawdopodobnie nie będzie działać w przyszłości, ponieważ metoda jest przestarzała. Zobacz odpowiednie źródło Chromu i odpowiednią łatkę .

Zostało to już rozpoznane i naprawione w jQuery 1.11 (patrz tutaj i tutaj ).

Paul Mougel
źródło
12
Wątpię, czy ktokolwiek to zepsuje w najbliższym czasie, jeśli oznacza to uszkodzenie wszystkich stron używających JQuery <1.11.
Backpackcoder
26
To ostrzeżenie pojawia się również w jQuery 2.0.3 (najnowsza stabilna wersja tego komentarza), a bieżący kamień milowy jest ustawiony na 2.1 dla poprawki.
przeciwdziałanie
Czy użycie jQuery 1.11 naprawi problem?
Krunal
Wystarczy, aby wyjaśnić ... jQueryjest nie przestarzałe używając return falsew swoich click koparki? Czy Chrome narzeka na fragment kodu znaleziony w bibliotece jQuery?
mpen
2
W rzeczy samej. Chrome jest przestarzałe, event.returnValueco istniało tylko dla kompatybilności wstecznej z IE
Paul Mougel
22

Tylko dla odniesienia innych, właśnie to otrzymałem i stwierdziłem, że było to spowodowane AngularJS . Jest to kompatybilność wsteczna:

if (!event.preventDefault) {
    event.preventDefault = function() {
        event.returnValue = false; //ie
    };
}
Ledivin
źródło
4
Występuje błąd w witrynie z odkrytymi kośćmi, bez użycia kątownika ani odniesienia - być może pośrednio, ale wątpię.
B. Clay Shannon
1
@ B.ClayShannon: To nie jest błąd, to ostrzeżenie. Jest duża różnica, szczególnie w naszym kontekście. Możesz to bezpiecznie zignorować.
f. Kardynał
1
@ B.ClayShannon Jeśli w ogóle go dodasz, Chrome przeanalizuje go dokładnie tak samo, jakby to był dostarczony przez Ciebie skrypt, i (poprawnie) wyśle ​​ostrzeżenie.
iCodeSometime
20

Jeśli używasz Bootstrap :

Obecna wersja Bootstrap (3.0.2) (z jQuery 1.10.2 i Chrome) również wydaje się generować to ostrzeżenie.

(Robi to również na Twitterze, BTW).

Aktualizacja

Obecna wersja Bootstrap (3.1.0) nie wydaje się już generować tego ostrzeżenia.

chorąży
źródło
19

To twój problem z interfejsem API jQuery , a nie twój skrypt. Nie ma się czym martwić.

Victor Zhang
źródło
6

Jest to ostrzeżenie związane z faktem, że większość frameworków JavaScript (jQuery, Angular, YUI, Bootstrap ...) oferuje obsługę wsteczną dla najbardziej nieprzyjemnych i najbardziej znienawidzonych Internet Explorer, począwszy od IE8 aż do IE6: /

Pewnego dnia wsparcie kompatybilności wstecznej zostanie porzucone (dla IE8 / 7/6, ponieważ IE9 sobie z tym radzi) i nie zobaczysz już tego ostrzeżenia (i innych błędów IEish) ..

To kwestia czasu (teraz IE8 ma 10% światowego udziału, gdy osiągnie 1%, jest ŚMIERTELNY ), tymczasem po prostu zignoruj ​​ostrzeżenie i pozostań zen :)

numediaweb
źródło
jQuery 2.xx obsługuje tylko IE9 i nowsze wersje. Jeśli chcesz obsługiwać IE8 w jQuery, musisz użyć wersji 1.xx
Pete
3

Widziałem to ostrzeżenie na wielu stronach internetowych. Widziałem też, że biblioteka YUI 3 również daje takie samo ostrzeżenie. Jest to ostrzeżenie generowane z biblioteki (niezależnie od tego, czy jest to jQuery, czy YUI).

eAbi
źródło