IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Uncaught error: Syntax error lors d'un clic sur un élément de menu


Sujet :

jQuery

  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Par défaut Uncaught error: Syntax error lors d'un clic sur un élément de menu
    Bonjour à tous,

    J'utilise un thème Wordpress nt-revity, que j'ai obtenu gratuitement grâce à une promo Envato.

    Après des semaines de travail pour designer mon site avec, je me suis aperçu qu'il a un bug critique : lorsque je clique sur un élément de menu, qui redirige vers une catégorie d'article ou un lien personnalisé, j'obtiens cette erreur depuis la librairie jQuery:

    Uncaught Error: Syntax error, unrecognized expression: https://www.monurl.com
    at Function.ea.error (jquery.js?ver=1.12.4-wp:462)
    at ea.tokenize (jquery.js?ver=1.12.4-wp:721)
    at ea.select (jquery.js?ver=1.12.4-wp:866)
    at Function.ea (jquery.js?ver=1.12.4-wp:301)
    at Function.a.find (jquery-migrate.min.js?ver=1.4.1:2)
    at n.fn.init.find (jquery.js?ver=1.12.4-wp:946)
    at n.fn.init.a.fn.find (jquery-migrate.min.js?ver=1.4.1:2)
    at a.fn.init.n.fn.init (jquery.js?ver=1.12.4-wp:964)
    at new a.fn.init (jquery-migrate.min.js?ver=1.4.1:2)
    at n (jquery.js?ver=1.12.4-wp:19)
    Voici le code (c'est tout simplement celui de jQuery 1.12.4):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    function na(a) {
                return a && void 0 !== a.getElementsByTagName && a
            }
            c = ea.support = {}, f = ea.isXML = function(a) {
                var b = a && (a.ownerDocument || a).documentElement;
                return !!b && "HTML" !== b.nodeName
            }, m = ea.setDocument = function(a) {
                var b, e, g = a ? a.ownerDocument || a : v;
                return g !== n && 9 === g.nodeType && g.documentElement ? (n = g, o = n.documentElement, p = !f(n), (e = n.defaultView) && e.top !== e && (e.addEventListener ? e.addEventListener("unload", da, !1) : e.attachEvent && e.attachEvent("onunload", da)), c.attributes = ha(function(a) {
                    return a.className = "i", !a.getAttribute("className")
                }), c.getElementsByTagName = ha(function(a) {
                    return a.appendChild(n.createComment("")), !a.getElementsByTagName("*").length
                }), c.getElementsByClassName = Z.test(n.getElementsByClassName), c.getById = ha(function(a) {
                    return o.appendChild(a).id = u, !n.getElementsByName || !n.getElementsByName(u).length
                }), c.getById ? (d.find.ID = function(a, b) {
                    if (void 0 !== b.getElementById && p) {
                        var c = b.getElementById(a);
                        return c ? [c] : []
                    }
                }, d.filter.ID = function(a) {
                    var b = a.replace(ba, ca);
                    return function(a) {
                        return a.getAttribute("id") === b
                    }
                }) : (delete d.find.ID, d.filter.ID = function(a) {
                    var b = a.replace(ba, ca);
                    return function(a) {
                        var c = void 0 !== a.getAttributeNode && a.getAttributeNode("id");
                        return c && c.value === b
                    }
                }), d.find.TAG = c.getElementsByTagName ? function(a, b) {
                    return void 0 !== b.getElementsByTagName ? b.getElementsByTagName(a) : c.qsa ? b.querySelectorAll(a) : void 0
                } : function(a, b) {
                    var c, d = [],
                        e = 0,
                        f = b.getElementsByTagName(a);
                    if ("*" === a) {
                        while (c = f[e++]) 1 === c.nodeType && d.push(c);
                        return d
                    }
                    return f
                }, d.find.CLASS = c.getElementsByClassName && function(a, b) {
                    if (void 0 !== b.getElementsByClassName && p) return b.getElementsByClassName(a)
                }, r = [], q = [], (c.qsa = Z.test(n.querySelectorAll)) && (ha(function(a) {
                    o.appendChild(a).innerHTML = "<a id='" + u + "'></a><select id='" + u + "-\r\\' msallowcapture=''><option selected=''></option></select>", a.querySelectorAll("[msallowcapture^='']").length && q.push("[*^$]=" + L + "*(?:''|\"\")"), a.querySelectorAll("[selected]").length || q.push("\\[" + L + "*(?:value|" + K + ")"), a.querySelectorAll("[id~=" + u + "-]").length || q.push("~="), a.querySelectorAll(":checked").length || q.push(":checked"), a.querySelectorAll("a#" + u + "+*").length || q.push(".#.+[+~]")
                }), ha(function(a) {
                    var b = n.createElement("input");
                    b.setAttribute("type", "hidden"), a.appendChild(b).setAttribute("name", "D"), a.querySelectorAll("[name=d]").length && q.push("name" + L + "*[*^$|!~]?="), a.querySelectorAll(":enabled").length || q.push(":enabled", ":disabled"), a.querySelectorAll("*,:x"), q.push(",.*:")
                })), (c.matchesSelector = Z.test(s = o.matches || o.webkitMatchesSelector || o.mozMatchesSelector || o.oMatchesSelector || o.msMatchesSelector)) && ha(function(a) {
                    c.disconnectedMatch = s.call(a, "div"), s.call(a, "[s!='']:x"), r.push("!=", O)
                }), q = q.length && new RegExp(q.join("|")), r = r.length && new RegExp(r.join("|")), b = Z.test(o.compareDocumentPosition), t = b || Z.test(o.contains) ? function(a, b) {
                    var c = 9 === a.nodeType ? a.documentElement : a,
                        d = b && b.parentNode;
                    return a === d || !(!d || 1 !== d.nodeType || !(c.contains ? c.contains(d) : a.compareDocumentPosition && 16 & a.compareDocumentPosition(d)))
                } : function(a, b) {
                    if (b)
                        while (b = b.parentNode)
                            if (b === a) return !0;
                    return !1
                }, B = b ? function(a, b) {
                    if (a === b) return l = !0, 0;
                    var d = !a.compareDocumentPosition - !b.compareDocumentPosition;
                    return d || (d = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1, 1 & d || !c.sortDetached && b.compareDocumentPosition(a) === d ? a === n || a.ownerDocument === v && t(v, a) ? -1 : b === n || b.ownerDocument === v && t(v, b) ? 1 : k ? J(k, a) - J(k, b) : 0 : 4 & d ? -1 : 1)
                } : function(a, b) {
                    if (a === b) return l = !0, 0;
                    var c, d = 0,
                        e = a.parentNode,
                        f = b.parentNode,
                        g = [a],
                        h = [b];
                    if (!e || !f) return a === n ? -1 : b === n ? 1 : e ? -1 : f ? 1 : k ? J(k, a) - J(k, b) : 0;
                    if (e === f) return ja(a, b);
                    c = a;
                    while (c = c.parentNode) g.unshift(c);
                    c = b;
                    while (c = c.parentNode) h.unshift(c);
                    while (g[d] === h[d]) d++;
                    return d ? ja(g[d], h[d]) : g[d] === v ? -1 : h[d] === v ? 1 : 0
                }, n) : n
            }, ea.matches = function(a, b) {
                return ea(a, null, null, b)
            }, ea.matchesSelector = function(a, b) {
                if ((a.ownerDocument || a) !== n && m(a), b = b.replace(T, "='$1']"), c.matchesSelector && p && !A[b + " "] && (!r || !r.test(b)) && (!q || !q.test(b))) try {
                    var d = s.call(a, b);
                    if (d || c.disconnectedMatch || a.document && 11 !== a.document.nodeType) return d
                } catch (xa) {}
                return ea(b, n, null, [a]).length > 0
            }, ea.contains = function(a, b) {
                return (a.ownerDocument || a) !== n && m(a), t(a, b)
            }, ea.attr = function(a, b) {
                (a.ownerDocument || a) !== n && m(a);
                var e = d.attrHandle[b.toLowerCase()],
                    f = e && D.call(d.attrHandle, b.toLowerCase()) ? e(a, b, !p) : void 0;
                return void 0 !== f ? f : c.attributes || !p ? a.getAttribute(b) : (f = a.getAttributeNode(b)) && f.specified ? f.value : null
            }, ea.error = function(a) {
                throw new Error("Syntax error, unrecognized expression: " + a)
            }, ea.uniqueSort = function(a) {
                var b, d = [],
                    e = 0,
                    f = 0;
                if (l = !c.detectDuplicates, k = !c.sortStable && a.slice(0), a.sort(B), l) {
                    while (b = a[f++]) b === a[f] && (e = d.push(f));
                    while (e--) a.splice(d[e], 1)
                }
                return k = null, a
            },[...]
    Je vous avoue que ça fait des jours que je cherche et que je tatonne, mais je reconnais que vu le code de la librairie, cela est au dessus de mes compétences...
    Pouvez-vous m'aider, ou au moins me donner des conseils sur comment le déboguer ?

    Merci d'avance.

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 509
    Par défaut
    Salut,

    Je pense que c'est une erreur de syntaxe dans le sélecteur jQuery, quel est le code html de tes éléments ?

    Fais un clic droit sur les éléments puis inspecter pour voir le code source html et colles le.

    Tu gère le clic sur les éléments du menu avec jQuery ?

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Par défaut
    Salut Toufik,

    Merci de t'être donné la peine de me répondre.

    Les boutons du menu sont gérés par une interface spéciale dans l'admin de Wordpress. Pour les clics, je ne sais pas ce qu'ils utilisent, mais ça m'a tout l'air d'être géré en jQuery, oui.

    Voici le code HTML:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <ul id="menu-principal" class="k-nav-links">
       <li id="menu-item-16" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-16"><a title="À propos de" href="https://monsite.com/a-propos-de/">À propos de</a></li>
       <li id="menu-item-91" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-91sub item-has-children"><a title="Tutoriels" href="https://monsite.com/category/tutoriels/" data-toggle="dropdown" class="dropdown-toggle">Tutoriels <span class="caret"></span></a>
    <ul role="menu" class="sub-menu dropdown-menu">
    	<li id="menu-item-93" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-93"><a title="Mobile" href="https://monsite.com/category/tutoriels/mobile/">Mobile</a></li>
    </ul>
    </li>
    <li id="menu-item-92" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-92"><a title="Astuces" href="#" data-nav-to="https://monsite.com/category/astuces/">Astuces</a></li>
    <li id="menu-item-18" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-18"><a title="Contact" href="https://monsite.com/contact/">Contact</a></li>
    </ul>

    Dans ce code, le bouton Astuces génère l'erreur :
    jquery.js?ver=1.12.4-wp:462 Uncaught Error: Syntax error, unrecognized expression: https://monsite.com/category/astuces/
    at Function.ea.error (jquery.js?ver=1.12.4-wp:462)
    at ea.tokenize (jquery.js?ver=1.12.4-wp:721)
    at ea.select (jquery.js?ver=1.12.4-wp:866)
    at Function.ea (jquery.js?ver=1.12.4-wp:301)
    at Function.a.find (jquery-migrate.min.js?ver=1.4.1:2)
    at n.fn.init.find (jquery.js?ver=1.12.4-wp:946)
    at n.fn.init.a.fn.find (jquery-migrate.min.js?ver=1.4.1:2)
    at a.fn.init.n.fn.init (jquery.js?ver=1.12.4-wp:964)
    at new a.fn.init (jquery-migrate.min.js?ver=1.4.1:2)
    at n (jquery.js?ver=1.12.4-wp:19)
    Chose que je n'avais pas remarquée jusqu'alors, le bouton Tutoriels génère une autre erreur :
    Uncaught TypeError: Cannot read property 'top' of undefined
    at HTMLAnchorElement.ql_clickAnchor (minified.js?ver=1.0:1391)
    at HTMLAnchorElement.dispatch (jquery.js?ver=1.12.4-wp:1627)
    at HTMLAnchorElement.r.handle (jquery.js?ver=1.12.4-wp:1567)
    Mais passons sur celle-ci, je la résoudrai plus tard.

    Et voici le code PHP qui, je pense, génère ce code HTML:
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    <?php
    // START METABOXMENU
    if ( ! function_exists( 'nt_revity_combinemenu' ) ) :
    	function nt_revity_combinemenu() {
     
    		$nt_revity_menu_item_name 	= 	rwmb_meta( 'nt_revity_section_name' );
    		$nt_revity_menu_item_url 	= 	rwmb_meta( 'nt_revity_section_url' );
    		$nt_revity_menutype 		= 	rwmb_meta( 'nt_revity_menutype' );
     
    	if( $nt_revity_menutype == 'm' ) :
     
    		if( $nt_revity_menu_item_name !='' ) : ?>
     
    		   <ul class="k-nav-links">
     
    		   <!-- Custom: Force add Home button (because of old jQuery bug) - Desperately not working -->
    		   <!-- <li><a href="https://monsite.com/unepage"><span>Home</span></a></li> -->
     
    		   <?php foreach (array_combine($nt_revity_menu_item_name, $nt_revity_menu_item_url) as $name => $url) {
     
    		   if (false === strpos($url, '://')) {
    		   ?>
     
    			<li><a data-nav-to="<?php echo esc_url( $url ); ?>" href="#"><span><?php echo esc_html( $name ); ?></span></a></li>
     
    		   <?php }else{ ?>
    			<li><a href="<?php echo esc_url( $url ); ?>"><span><?php echo esc_html( $name ); ?></span></a></li>
     
    		   <?php }
    		   }
    		   ?>
     
    		   </ul>
     
    		<?php endif;
     
    	else :
     
    		wp_nav_menu( array(
    			'menu'              => 'primary',
    			'theme_location'    => 'primary',
    			'depth'             => 3,
    			'container'         => '',
    			'container_class'   => '',
    			'menu_class'        => 'k-nav-links',
    			'menu_id'		    => '',
    			'echo' 				=> true,
    			'fallback_cb'       => 'Nt_Revity_Wp_Bootstrap_Navwalker::fallback',
    			'walker'            => new Nt_Revity_Wp_Bootstrap_Navwalker()
    		));
     
    	endif;
     
    	}
    endif;

    Comme tu peux le voir, en rouge, j'ai essayé désespérément de rajouter des menus "à la main" (ce n'est pas propre, je sais), dans l'espoir de contourner le problème.
    Mais malheureusement, mes éléments rajoutés ne s'affichent jamais, même en nettoyant tous les caches possibles.

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 509
    Par défaut
    Salut,

    Vérifie d'abord dans le fichier js s'il y'a un gestionnaire d'événement "click" attaché aux balises <a> ou les <li> du menu.

    Et d'après ce que je vois, ta version actuelle de jQuery est 1.12.4, alors qu'on est maintenant à 3.5.1.

    Et si tu modifies la version de jQuery, toujours les mêmes erreurs ?

    Voir le cdn des versions jQuery.

    Sans code on ne peut rien deviner...

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Par défaut
    Voici ce que j'ai trouvé :

    minified.js
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        function ql_clickAnchor(e) {
            var target = jQuery(this).attr("data-nav-to");
            if (jQuery(this).attr("href") == "#") {
                e.preventDefault()
            }
            jQuery("html, body").stop().animate({
                scrollTop: jQuery(target).offset().top - 50
            }, 600)
        };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
        function ql_scrollToggle() {
            var scrollPos = jQuery(document).scrollTop();
            menuItems.each(function() {
                var currentLink = jQuery(this);
                var refSection = jQuery(currentLink.attr("data-nav-to"));
                if (currentLink.attr("href") == "#" && refSection.offset() != undefined) {
                    var topOffset = refSection.offset().top - 60;
                    var bottomOffset = topOffset + refSection.height();
                    if (topOffset <= scrollPos) {
                        menuItems.parent().removeClass("active");
                        currentLink.parent().addClass("active")
                    } else {
                        currentLink.parent().removeClass("active")
                    }
                }
            })
        };
        navToggle.on("click", ql_toggleMenu);
        jQuery(".main-container").on("click", ql_closeMenu);
        menuItems.on("click", ql_closeMenu);
        ql_resizeFunc();
        jQuery(window).on("resize", ql_resizeFunc);
        if (params.stuck) {
            ql_fixedNav();
            jQuery(window).on("scroll", ql_fixedNav);
            jQuery(window).on("resize", ql_fixedNav)
        }
        jQuery(window).on("scroll", ql_scrollToggle);
        menuItems.on("click", ql_clickAnchor)
    };
    Main.js
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
        // =================================================================================
        // Parallax Content
        // =================================================================================
        var parallax_content = $(".parallax-text");
        function parallax_text(){
          if($window.width() >= 992){
            var s = $window.scrollTop() + 0.001;
            var a = s*0.01;
            var b = (a/s*10)*a;
            var c = 1 - b*1.5;
            parallax_content.css("opacity", c);
            parallax_content.css("-webkit-transform", "translateY(" + (s/2) + "px)");
            parallax_content.css("-moz-transform", "translateY(" + (s/2) + "px)");
          } else {
            parallax_content.css("-webkit-transform", "translateY(0)");
            parallax_content.css("-moz-transform", "translateY(0)");
            parallax_content.css("opacity", 1);
          }
        }
        if(parallax_content.length){
          $window.on("scroll", parallax_text);
          $window.on("resize", parallax_text);
        }
     
     
        $('.dropdown-menu li a').removeAttr("data-nav-to");
        $('a[data-nav-to]').attr("href", "#");
    theme-init.php
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // If item has_children add atts to a.
    			if ( $args->has_children && $depth === 0 ) {
    				$atts['href']   		= $item->url;
    				$atts['data-toggle']	= 'dropdown';
    				$atts['class']			= 'dropdown-toggle';
    			} else {
    				$atts['href'] = ! empty( $item->url ) ? $item->url: '';
    				if( 'page' != $item->object ){
    					$atts['data-nav-to'] = ! empty( $item->url ) ? $item->url : '';
    				}
    			}

    template-parts.php
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    // START METABOXMENU
    if ( ! function_exists( 'nt_revity_combinemenu' ) ) :
    	function nt_revity_combinemenu() {
     
    		$nt_revity_menu_item_name 	= 	rwmb_meta( 'nt_revity_section_name' );
    		$nt_revity_menu_item_url 	= 	rwmb_meta( 'nt_revity_section_url' );
    		$nt_revity_menutype 		= 	rwmb_meta( 'nt_revity_menutype' );
     
    	if( $nt_revity_menutype == 'm' ) :
     
    		if( $nt_revity_menu_item_name !='' ) : ?>
     
    		   <ul class="k-nav-links">
     
    		   <!-- Custom: Force add Home button (because of old jQuery bug) - Desperately not working -->
    		   <!-- <li><a href="https://monsite.fr/"><span>Home</span></a></li> -->
     
    		   <?php foreach (array_combine($nt_revity_menu_item_name, $nt_revity_menu_item_url) as $name => $url) {
     
    		   if (false === strpos($url, '://')) {
    		   ?>
     
    			<li><a data-nav-to="<?php echo esc_url( $url ); ?>" href="#"><span><?php echo esc_html( $name ); ?></span></a></li>
     
    		   <?php }else{ ?>
    			<li><a href="<?php echo esc_url( $url ); ?>"><span><?php echo esc_html( $name ); ?></span></a></li>
     
    		   <?php }
    		   }
    		   ?>
     
    		   </ul>
     
    		<?php endif;
     
    	else :
     
    		wp_nav_menu( array(
    			'menu'              => 'primary',
    			'theme_location'    => 'primary',
    			'depth'             => 3,
    			'container'         => '',
    			'container_class'   => '',
    			'menu_class'        => 'k-nav-links',
    			'menu_id'		    => '',
    			'echo' 				=> true,
    			'fallback_cb'       => 'Nt_Revity_Wp_Bootstrap_Navwalker::fallback',
    			'walker'            => new Nt_Revity_Wp_Bootstrap_Navwalker()
    		));
     
    	endif;
     
    	}
    endif;
     
    add_action( 'nt_revity_combinemenu_action',  'nt_revity_combinemenu', 10 );

    Je ne suis pas sûr que ça m'aide, mais je vais creuser un peu de mon côté en attendant ta réponse.
    Merci.

  6. #6
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 509
    Par défaut
    Bonsoir,

    Je pense que le problème est relatif à l'attribut data-nav-to.

    Voyons un peu comment ton menu est généré :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php 
       foreach (array_combine($nt_revity_menu_item_name, $nt_revity_menu_item_url) as $name => $url) {
            if (false === strpos($url, '://')) {?>
                 <li><a data-nav-to="<?php echo esc_url( $url ); ?>" href="#"><span><?php echo esc_html( $name ); ?></span></a></li>
            <?php } else{ ?>
    	     <li><a href="<?php echo esc_url( $url ); ?>"><span><?php echo esc_html( $name ); ?></span></a></li>
            <?php }
       }
    Fais un var_dump(array_combine($nt_revity_menu_item_name, $nt_revity_menu_item_url)); avant la boucle foreach pour nous montrer le contenu de ce tableau combiné.

    Après au chargement de la page jQuery intervient, dans main.js on trouve deux lignes, la première qui supprime l'attribut data-nav-to de tous les <a> enfants des <li> qui sont dans ".dropdown-menu", et la deuxième remplace les "href" par "#" de tous les <a> ayant un attribut data-nav-to :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $('.dropdown-menu li a').removeAttr("data-nav-to");
    $('a[data-nav-to]').attr("href", "#");
    Donc pour le bouton Tutoriels qui génère une erreur, dans minified.js on voit ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    menuItems.on("click", ql_clickAnchor);
    Cela attache un écouteur d'événement click sur les "menuItems", et d'après ce que je vois la variable js "menuItems" vaut aux <a></a> enfants de <li class="menu-item">...</li> (cherche dans le fichier js la valeur initiale de menuItems pour me corriger si je me trompe...).

    Lorsqu'on clique sur ces <a> la fonction ql_clickAnchor() s'exécute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function ql_clickAnchor(e) {
         var target = jQuery(this).attr("data-nav-to");//le problème est que les <a> n'ont pas d'attribut "data-nav-to", donc target=undefined !
         //tu peux mettre un console.log("target :"+target); pour voir...
         if (jQuery(this).attr("href") == "#") {//cette condition n'est pas vraie lorsque tu cliques sur le <a> du Tutoriels car son href="https://monsite.com/category/tutoriels/" et pas "#"
             e.preventDefault()
         }
         jQuery("html, body").stop().animate({
             scrollTop: jQuery("[data-nav-to='"+target+"']").offset().top - 50//ce qui donne une erreur ici, vu que target est undefined.
         }, 600)
    }
    Tu peux éviter cette erreur en vérifiant l'existence de target (mais ça n'empêche pas de chercher une solution plus propre...):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if(target){//si target est défini ...
         jQuery("html, body").stop().animate({
             scrollTop: jQuery(target).offset().top - 50//ce qui donne une erreur ici, vu que target est undefined.
         }, 600)
    }

  7. #7
    Membre très actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Par défaut
    Salut,

    Tout d'abord merci pour les efforts que tu investis dans l'investigation de mon code.

    Pour la variable initiale de menuItems dans minified.js:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // ==========
    // Navigation
    // ==========
    var Navigation = function(params) {
        var nav = jQuery(".k-nav");
        var navOutside = nav.find(".k-nav-outside");
        var navToggle = nav.find(".k-nav-toggle");
        var menu = jQuery(".k-nav-links");
        var menuItems = jQuery(".k-nav-links > li > a");
        if (params.init) {
            nav.css({
                "display": "block"
            })
        };
    Pour le var_dump, je t'avoue que je ne sais pas comment le lire... j'ai essayé de twitter array_combine($nt_revity_menu_item_name, $nt_revity_menu_item_url) en console JavaScript, aka:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo '<script type="text/javascript">console.log('.array_combine($nt_revity_menu_item_name, $nt_revity_menu_item_url).');</script>' ?>
    juste avant la boucle foreach, mais à l'instar des objets de menu que j'ajoute à la main dans le fichier, il ignore mon code...
    J'ai essayé plusieurs navigateur, vidé mon cache...etc. rien n'y fait...

  8. #8
    Membre très actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Par défaut
    Ok, j'ai un petit peu avancé sur le base de ma dernière déclaration. En fait, le code qui génère mon menu dans template-parts.php est plutôt celui-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    // START PRIMARY MENU
    if ( ! function_exists( 'nt_revity_menu' ) ) :
    	function nt_revity_menu() {
     
    		wp_nav_menu( array(
    			'menu'              => 'primary',
    			'theme_location'    => 'primary',
    			'depth'             => 3,
    			'container'         => '',
    			'container_class'   => '',
    			'menu_class'        => 'k-nav-links',
    			'menu_id'		  => '',
    			'echo' 		  => true,
    			'fallback_cb'       => 'Nt_Revity_Wp_Bootstrap_Navwalker::fallback',
    			'walker'            => new Nt_Revity_Wp_Bootstrap_Navwalker()
    		));
     
    	}
    endif;
     
    add_action( 'nt_revity_menu_action',  'nt_revity_menu', 10 );
    Cela explique pourquoi en ajoutant des <li> à la main, je ne voyais rien ; il n'allait pas dans cette zone du code.

    En revanche, dans les fichiers sus-cités, pour l'instant, je ne trouve pas ce que sont Nt_Revity_Wp_Bootstrap_Navwalker() et nt_revity_menu_action...

  9. #9
    Membre très actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Par défaut
    Et aussi, j'ai mis à jour la librairie jQuery de base vers la 3.5.1, et revu un peu mes menus. Désormais, toutes les options qui redirigent vers des Pages fonctionnent, et celles qui redirigent soit vers des catégories, soit vers un lien personnalisé (ce dernier est le plus important car je crois que je vais utiliser ça partout, en fait), j'ai cette erreur :

    jquery.js?ver=3.5.1-wp:478 Uncaught Error: Syntax error, unrecognized expression: https://monsite.fr
    at Function.se.error (jquery.js?ver=3.5.1-wp:478)
    at se.tokenize (jquery.js?ver=3.5.1-wp:827)
    at se.select (jquery.js?ver=3.5.1-wp:871)
    at Function.se (jquery.js?ver=3.5.1-wp:293)
    at Function.a.find (jquery-migrate.min.js?ver=1.4.1:2)
    at S.fn.init.find (jquery.js?ver=3.5.1-wp:947)
    at S.fn.init.a.fn.find (jquery-migrate.min.js?ver=1.4.1:2)
    at a.fn.init.S.fn.init (jquery.js?ver=3.5.1-wp:965)
    at new a.fn.init (jquery-migrate.min.js?ver=1.4.1:2)
    at S (jquery.js?ver=3.5.1-wp:51)
    Si tu peux m'aider à juste résoudre celle-là, je t'en serais très reconnaissant.
    On tourne un peu en rond, mais j'ai essayé quelques unes de tes astuces :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function ql_clickAnchor(e) {
            var target = jQuery(this).attr("data-nav-to");
    		console.log("target: "+target);
            if (jQuery(this).attr("href") == "#") {
    			console.log("Activating e.preventDefault");
                e.preventDefault()
            }
    		if (target) {
    			console.log("ScrollTop activated for target "+target);
    			jQuery("html, body").stop().animate({
    				scrollTop: jQuery(target).offset().top - 50
    			}, 600)
    		}
        };
    Donne ceci :
    minified.js?ver=1.0:1387 target: https://www.monsite.fr
    minified.js?ver=1.0:1389 Activating e.preventDefault
    minified.js?ver=1.0:1393 ScrollTop activated for target https://www.monsite.fr
    A priori, l'erreur provient donc du target qui est en rouge, mais je ne sais pas par quoi le remplacer...

    Edit : Après quelques recherches supplémentaires, j'ai résolu contourné mon problème en faisant ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function ql_clickAnchor(e) {
            var target = jQuery(this).attr("data-nav-to");
            if (jQuery(this).attr("href") == "#") {
                e.preventDefault()
            }
    	window.location.href = target;
    	/*jQuery("html, body").stop().animate({
    		scrollTop: jQuery(target).offset().top - 50
    	}, 600)*/
        };
    Avec ça, j'ai toujours l'erreur, mais désormais la redirection fonctionne ! Au moins ça !
    Par contre, ce que je ne comprends pas, c'est que désormais, rien qu'en scrollant sur ma page, l'erreur ci-dessus apparaît à chaque mouvement... du coup en scrollant j'ai des milliers de fois cette erreur !

    Je veux bien que tu m'éclaires une fois de plus, mais je te remercie pour tes commentaires jusqu'à maintenant car sans tes éclairages, je ne pense pas que j'y serai arrivé tout seul.

  10. #10
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 509
    Par défaut
    Bonsoir,


    En fait je me suis trompé dans mon 6éme post en ce qui concerne le target, essaies ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
         var target = jQuery(this).attr("data-nav-to");//le problème est que les <a> n'ont pas d'attribut "data-nav-to", donc target=undefined !
         if (jQuery(this).attr("href") == "#") {
             e.preventDefault();
         }
         jQuery("html, body").stop().animate({
             scrollTop: jQuery("[data-nav-to='"+target+"']").offset().top - 50//positionne le scoll de la barre de défilement au même top de l'élément ayant data-nav-to="target" -50px.
         }, 600)
    Le script utilise le e.preventDefault() seulement sur les <a href="#"></a> et cela empêche le navigateur de suivre le lien du href (logique,vu qu'il ne peut y avoir un lien=#) d'un <a href="#"> sur lequel on clique, et en plus si tu la supprime le reste du code ne te servira à rien parce que la page sera rechargée, et donc toute la fonction est inutile et je ne suis pas sûr que c'est la bonne solution ...

    A mon avis, garde là mais vérifies l'existence du target avec length avant de passer à l'animation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
         var target = jQuery(this).attr("data-nav-to");
         if (jQuery(this).attr("href") == "#") {
             e.preventDefault();
         }
         if(jQuery("[data-nav-to='"+target+"']").length){
            jQuery("html, body").stop().animate({
                scrollTop: jQuery("[data-nav-to='"+target+"']").offset().top - 50//positionne le scoll de la barre de défilement au même top de l'élément ayant data-nav-to="target" -50px.
             }, 600)
         }
         else{
              console.log("Cet élément n'existe pas dans le document !");
         }
    Puis pour l'erreur du scroll, tu vois bien deux écouteurs d'événement "scroll" dans js :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    jQuery(window).on("scroll", ql_fixedNav);
    //et 
    jQuery(window).on("scroll", ql_scrollToggle);
    Tu dois vérifier et mettre des console.log dans les deux fonctions ql_fixedNav et ql_scrollToggle pour savoir laquelle qui génère l'erreur.

  11. #11
    Membre très actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Par défaut
    Salut,

    Merci pour ta réponse. Ces derniers jours ont été mouvementés pour moi, avec mon hébergeur qui a cassé son serveur puis l'a remis en route avec mes sites web en rade...
    J'ai passé mon temps à déboguer mes .htaccess mais au moins je pense que maintenant c'est propre.

    Par contre, soudainement, ce problème là est apparu sur le site qui nous concerne : le logo et le menu n'apparaissent plus à cause de cette erreur :

    minified.js
    Uncaught SyntaxError: Unexpected end of input
    jQuery.js
    Uncaught ReferenceError: Navigation is not defined
    at HTMLDocument.<anonymous> (main.js?ver=1.0:88)
    at e (jquery.js?ver=3.5.1-wp:1178)
    at t (jquery.js?ver=3.5.1-wp:1184)
    Ca a l'air lié à l'upgrade de ma version de jQuery, mais c'est étrange que ce problème ne soit pas apparu plus tôt... :/
    Je vais regarder ça. Dès que j'ai résolu ça, je reviens à ta propositon de code.
    Merci.

    Edit: Bon j'ai corrigé ça, c'était une accolade manquante dans mon code. Je regarde le reste demain.

  12. #12
    Membre très actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Par défaut
    Salut,

    Désolé pour la réponse tardive, mais j'ai réussi à contourner mes problèmes en faisant ceci :

    minified.js
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     function ql_clickAnchor(e) {
            var target = jQuery(this).attr("data-nav-to");
            window.location.href = target;
        };
    Et en commentant tout le contenu de la fonction ql_scrollToggle()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
        function ql_scrollToggle() {
    		/* Custom: Commented because it causes crashes. The implementation of menu URLs with '#' sucks. To check if no side effects. */
     
    		/*
            var scrollPos = jQuery(document).scrollTop();
            menuItems.each(function() {
                var currentLink = jQuery(this);
                var refSection = jQuery(currentLink.attr("data-nav-to"));
                if (currentLink.attr("href") == "#" && refSection.offset() != undefined) {
                    var topOffset = refSection.offset().top - 60;
                    var bottomOffset = topOffset + refSection.height();
                    if (topOffset <= scrollPos) {
                        menuItems.parent().removeClass("active");
                        currentLink.parent().addClass("active")
                    } else {
                        currentLink.parent().removeClass("active")
                    }
                }
            })*/
        };
    Ce n'est pas propre du tout, mais à priori je n'ai plus aucun problème et jusqu'à maintenant aucun effet de bord.
    De toute manière ce thème a l'air tellement crado que je ne sais pas si je vais pouvoir faire mieux...

    A suivre (peut-être) ?
    Merci pour ton aide.

  13. #13
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 509
    Par défaut
    Bonjour,

    L’équivalent de window.location.href = target; en jQuery est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jQuery(location).attr('href',target);

  14. #14
    Membre très actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Par défaut
    Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sélectionner un ListViewItem lors d'un clic sur un élément contenu dans son ItemTemplate
    Par Sankasssss dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 25/01/2018, 10h00
  2. [JFrame] lancer une méthode lors d'un clic sur la croix rouge
    Par Mushu74 dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 17/06/2008, 15h55
  3. Récupérer l'index lors d'un clic sur menustrip
    Par GriffinK dans le forum VB.NET
    Réponses: 5
    Dernier message: 15/04/2008, 14h54
  4. Ouvrir 4 états lors d'un clic sur un bouton
    Par Seb33300 dans le forum WebDev
    Réponses: 8
    Dernier message: 28/01/2008, 15h53
  5. Réponses: 3
    Dernier message: 23/10/2007, 13h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo