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?


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 ).


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

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.



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 :)


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).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.