Question

J'utilise javascript pushstate pour modifier l'URL de la page actuelle, lorsqu'un lien sur lequel j'ai cliqué :

<a href="/some-page/" onclick="url_go('/some-page/'); return false;">

Je souhaite autoriser le clic droit sur le lien et l'ouverture dans une nouvelle fenêtre - ainsi que CTRL + clic devraient s'ouvrir dans un nouveau robinet.Mais ce n’est pas le cas.

Comment puis-je faire fonctionner à la fois le clic normal (pushstate) et CTRL+clic (nouveau tapotement) ?

(Facebook le fait, mais je ne vois pas comment).

Était-ce utile?

La solution

Je suppose que vous voulez votre propre gestionnaire d'événements pour Click, mais laissez le comportement par défaut pour Ctrl+Click ou Scroll Button Click.Je n'ai pas trouvé exactement où Facebook le fait (il gère toujours les clics et les ctrl+clics de la même manière), mais cela peut être réalisé par code.

Vous devriez supprimer le onclick attribut de l'élément HTML et déplacez-le vers javascript.Vérifiez ensuite le event paramètre pour le ctrlKey propriété.Vous pouvez le faire en utilisant le code comme if (e.which > 1 || e.ctrlKey) ou utilisez une fonction plus complexe d'un site Web similaire à Facebook :

function shouldUseDefault(e) {
    return ((e = (e || window.event)) && (e.type == 'click' || e.type == 'mousedown' || e.type == 'mouseup') && (e.which > 1 || e.button > 1 || e.ctrlKey || e.shiftKey || browser.mac && e.metaKey)) || false;
} 

Ensuite, utilisez-le en javascript simple :

<a id="some-link-id" href="http://google.com">Test link</a>

<script type="text/javascript">
window.addEventListener("load", function() {
    var link = document.getElementById("some-link-id");
    link.addEventListener("click", function(clickEvent) {
        if (shouldUseDefault(clickEvent) === false) {
            url_go(link.href);
            clickEvent.preventDefault();
        }
    });
});
</script>

Ou dans jQuery si vous souhaitez prendre en charge les anciens navigateurs comme Internet Explorer 8 :

$(function() {
    $("#some-link-id").on("click", function(clickEvent) {
        if (shouldUseDefault(clickEvent) === false) {
            url_go(clickEvent.currentTarget.href);
            clickEvent.preventDefault();
        }
    });
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top