Bonjour à tous !
Petite question, actuellement j'ai une gestion de lien normaux, avec Cakephp du coup et en utilisant le helper img avec l'attribut url, donc classique.

Je veux que quand j'appuie sur entrée et que je suis sur le lien selected, ça m'envoie vers le lien en question.
J'utilise le plugin Keynav du coup de JQuery.

else if (e.keyCode == 13) {
                window.location = current.attr('href');
                e.preventDefault();
            }

J'ai vu que ça c'était du coup la chose pour la touche Entrée, mais quand je le fais voici ce que j'ai en erreur :

Missing Method in AccueilController
Error: The action undefined is not defined in controller AccueilController
Error: Create AccueilController::undefined() in file: app\Controller\AccueilController.php.
<?php
class AccueilController extends AppController {

    public function undefined() {
    }
}

J'en conclus qu'il utilise pas le href du coup...

En sortie j'ai ça :

<ul class="nav_holder">
        <li><div class="col-md-2 icon-lien">
            <a href="/bouygues-telecom/games/liste?needconnect=false"><img src="/bouygues-telecom/img/frames/btn-jouer.png" alt="Jouer !" /></a> 
        </div></li>
        <li><div class="col-md-2 icon-lien">
            <a href="/bouygues-telecom/achivements/liste?needconnect=false"><img src="/bouygues-telecom/img/frames/btn-mes-succes.png" alt="Jouer !" /></a>
        </div></li>
        <li><div class="col-md-2 icon-lien">
            <a href="/bouygues-telecom/tchat?needconnect=false"><img src="/bouygues-telecom/img/frames/btn-amis.png" alt="Jouer !" /></a> 
        </div></li>
        <li><div class="col-md-2 icon-lien">
            <a href="/bouygues-telecom/achivements/friendslist?needconnect=false"><img src="/bouygues-telecom/img/frames/btn-succes-amis.png" alt="Jouer !" /></a> 
        </div></li>

Et quand je suis sur le lien sélectionné j'ai bien :

<a href="/bouygues-telecom/games/liste?needconnect=false" class="selected"><img src="/bouygues-telecom/img/frames/btn-jouer.png" alt="Jouer !"></a>

C'est pas un problème au niveau du current.attr('href') ? genre il pointe pas au bon endroit ou que sais-je ?

7 réponses


christophe4427
Auteur
Réponse acceptée

J'avoue que j'ai copier coller le code de Keynav et comme j'y connais rien en JQuery j'ai pas vu pour le prevent machin -_-

Alors en fait, lorsqu'on lance mon application, au bout d'une seconde il y a un "#start" qui vient se greffer au bout de l'url. Et c'est ça qui fait buguer ma touche entrée car lorsque je ne "clique" sur entrée sans attendre le #start ça fonctionne très bien

Heu j'ai un bug de cerveau...lol
Je viens de re-tester et le premier coup ça me met le message d'erreur, et le second ça fonctionne c'est quoi cette blague ?

Oh putin j'ai compris !

J'ai un truc qui se lance et qui mets "#start" au bout > et ça me fait planter le lien -_-

Alors justement j'en profite, est-ce qu'il y a moyen de faire un truc en JQuery pour rajouter le #start ? Je comprends pas pourquoi il ne passe pas dans l'url... Même si je mets

<?php echo $this->Html->image("frames/btn-succes-amis.png", array(
                            "alt" => "Jouer !",
                            'url' => array('controller' => 'achivements', 'action' => 'friendslist','?'=>'needconnect=false#start',)
            ));?>

ça plante...

J'ai pas super pigé ton truc avec cake, mais pour ce qui est d'ajouter un #start a la fin d'un href:

var $sel = $('a');
$sel.attr('href', $sel.attr('href') + '#start' );

Modifie ton selecteur ($sel) pour qu'il fonctionne sur les liens que tu veux.

J'ai pas compris ton coup du selecteur ^^
J'ai un niveau à -80000 en JQuery...

$(document).keydown(function(e){
            if (checkNav && checkNav()) return;
            if (e.keyCode == 37) {
                // left
                setCurrent(x,y-1);
                e.preventDefault();
            } else if (e.keyCode == 38) {
                // up
                setCurrent(x-1,y);
                e.preventDefault();
            } else if (e.keyCode == 39) {
                // right
                setCurrent(x,y+1);
                e.preventDefault();
            } else if (e.keyCode == 40) {
                // down
                setCurrent(x+1,y);
                e.preventDefault();
            } else if (e.keyCode == 13) {
                window.location = current.attr('href');
                e.preventDefault();
            }
        });

ça c'est le truc global de Keynav, et tu vois le dernier elseif ? Bah je veux que quand je cliques sur entrée, ça m'envoie vers le href, j'ai rajouté ton + #start après ça lui change pas du tout la vie.

$(document).keydown(function(e){
    if (checkNav && checkNav()) return;
    if (e.keyCode == 37) {
        // left
        e.preventDefault();
        setCurrent(x,y-1);
    } else if (e.keyCode == 38) {
        // up
        e.preventDefault();
        setCurrent(x-1,y);
    } else if (e.keyCode == 39) {
        // right
        e.preventDefault();
        setCurrent(x,y+1);
    } else if (e.keyCode == 40) {
        // down
        e.preventDefault();
        setCurrent(x+1,y);
    } else if (e.keyCode == 13) {
        e.preventDefault();
        window.location = current.attr('href');
    }
});

Déja normalement les preventDefault() devraient etre mis immediatement, en premier dans ton if (j'ai changé ca dans le code ci-dessus).
Ensuite: Je pige pas, tu veux <u>ajouter</u> le #start a la fin de ton href, ou tu veux <u>l'enlever</u> s'il y est ?