Eroare TypeError neprinsă: Nu se poate citi proprietatea 'replace' a undefined

24 oct. 2018, 18:13:57
Vizualizări: 22.6K
Voturi: 1

Am folosit acest script jQuery pe multe dintre site-urile mele cu aceeași temă și setări.

Este într-o temă copil WordPress Genesis.

Totuși, în versiunea mea locală curentă, când dau click pe un link href care are clasa "scroll", primesc o eroare în consolă care spune:

captură de ecran cu eroarea TypeError în consolă

Linia 19 din fișierul meu app.js conține acest cod cu care nu am avut niciodată probleme până acum:

$(".scroll").click(function () {
        if (location.pathname.replace(/^\//, "") === this.pathname
            .replace(/^\//, '') && location.hostname === this.hostname
        ) {
            var target = $(this.hash);
            target = target.length ? target : $("[name=" + this
                .hash.slice(1) + "]");
            if (target.length) {
                $("html, body").animate({
                    scrollTop: target.offset().top
                }, 1000);
                return false;
            }
        }
    });

Folosesc jQuery 3.3.1. Am comentat tot codul din app.js pentru a identifica de unde ar putea proveni problema. Acest cod este chiar la început și am adăugat console.logs în tot documentul, care apar în Consolă.

Ce fac greșit aici?

Mulțumesc!

1
Comentarii

Hopa, am răspuns prea repede. Ai folosit o funcție anonimă în care treci jQuery pentru a fi mapat la semnul dolar $? Sau un document ready în care treci semnul dolar? Ai nevoie de una dintre acele funcții. Cum îți inițializezi scriptul? Te rog postează tot codul tău, ca să te putem ajuta.

Remzi Cavdar Remzi Cavdar
24 oct. 2018 19:51:25
Toate răspunsurile la întrebare 1
0

În WordPress jQuery este încărcat în modul noConflict, ceea ce înseamnă că trebuie să utilizați jQuery în loc de semnul dolar $

Puteți încadra codul într-o funcție anonimă (tehnic orice IIFE) în care pasați jQuery pentru a fi mapat la $ și combinați acest lucru cu document ready, astfel:

jQuery(document).ready(function($) {
    // $ Funcționează! Puteți testa cu următoarea linie dacă doriți
    // console.log($);
});

Ați putea face acest lucru și fără document ready (nu este recomandat):

(function($) {
    // $ Funcționează! Puteți testa cu următoarea linie dacă doriți
    // console.log($);
})( jQuery );

Consultați linkul pentru mai multe explicații: https://digwp.com/2011/09/using-instead-of-jquery-in-wordpress/

24 oct. 2018 19:19:41