2012-04-09 2 views
0

Je dois utiliser javascript pour faire des liens au lieu de plusieurs raisons sans importance, et je veux qu'il se comporte comme si je ne l'utilisais pas. Pas les effets c'est facile, mais je veux être en mesure de maintenir la touche Maj enfoncée en cliquant sur pour ouvrir une nouvelle fenêtre et pour l'ouvrir dans un nouvel onglet si elles sont maintenues ctrl. Comment ferais-je cela? En outre, il doit être compatible avec IE9.Détection de frappes sans zone de texte?

[modifier] De plus, cela va être dans un iframe

+0

Huh? –

+0

Fondamentalement, Im essayant d'ajouter des combinaisons de touches. – Oztaco

+0

Démo en direct: http://jsfiddle.net/DerekL/V8yzF/show –

Répondre

1

Je suppose que vous voulez quelque chose comme ceci:

jsFiddle

http://jsfiddle.net/MXuVY/3/

JavaScript

var ctrlPressed = false; 
$('#link').click(function() { 
    var link = 'http://stackoverflow.com/'; 
    if (ctrlPressed) { 
     window.open(link,'_blank'); 
    } else { 
     window.location = link; 
    } 
    return false; 
}); 
$(document).keydown(function (e) { 
    if (e.keyCode === 17) { 
     ctrlPressed = true; 
    } 
}); 
$(document).keyup(function (e) { 
    if (e.keyCode === 17) { 
     ctrlPressed = false; 
    } 
}); 

HTML

<span id="link">Link to stackoverflow</span>​ 

Version sans jQuery

jsFiddle

http://jsfiddle.net/MXuVY/6/

JavaScript

function addEvent(el, eType, fn, uC) { 
    if (el.addEventListener) { 
     el.addEventListener(eType, fn, uC); 
     return true; 
    } else if (el.attachEvent) { 
     return el.attachEvent('on' + eType, fn); 
    } else { 
     el['on' + eType] = fn; 
    } 
} 

var ctrlPressed = false, 
    a = document.getElementById('link'), 
    link = 'http://stackoverflow.com/'; 

addEvent(a, 'click', function() { 
    if (ctrlPressed) { 
     window.open(link,'_blank'); 
    } else { 
     window.location = link; 
    } 
    return false; 
}); 
addEvent(document, 'keydown', function (e) { 
    if (e.keyCode === 17) { 
     ctrlPressed = true; 
    } 
}); 
addEvent(document, 'keyup', function (e) { 
    if (e.keyCode === 17) { 
     ctrlPressed = false; 
    } 
}); 

+0

sur jsfiddle, il dit "pour des raisons de sécurité, le cadrage n'est pas autorisé, cliquez sur OK pour supprimer les images" – Oztaco

+0

ça ne fonctionne pas bien. Mais avez-vous une version sans jquery? – Oztaco

+0

Je vais en faire un :-) –

1

Bind un écouteur d'événement combinaison de touches à la fenêtre ou un document et utiliser sa fonction de rappel pour faire tout ce dont vous avez besoin.

Si vous utilisez jquery, il est un peu plus facile de faire un écouteur de frappe plus fiable, à mon humble avis. http://blog.cnizz.com/2008/10/27/javascript-key-listener/

+0

cela fonctionnera-t-il si ma fenêtre est dans un iframe qui n'a pas de focus? – Oztaco

+0

Sur le dessus de ma tête, je ne connais pas la réponse à cette question. Vous pouvez l'essayer et laissez-nous savoir si cela fonctionne. Ma conjecture est que cela fonctionnerait. – Kristian

+0

Non, l'iframe ne pourra pas recevoir d'événements de pression s'il n'a pas de focus. – HackedByChinese

0

Alors, voici ce que vous voulez: http://jsfiddle.net/DerekL/V8yzF/show

$("a").click(function(ev) { 
    if (ev.ctrlKey) {      //If ctrl 
     window.open(this.attr("href")); 
     retrun false; 
    } else if (ev.shiftKey) {   //If shift 
     window.open(this.attr("href"),"_blank", "width=400,height=300"); 
     retrun false; 
    } else {        //If nothing 
     //do nothing 
    } 
});​ 
Questions connexes