2012-04-09 14 views
0

Ich muss JavaScript verwenden, um Links statt für mehrere unwichtige Gründe zu machen, und ich möchte für es so verhalten, obwohl ich es nicht verwende. Nicht die Auswirkungen sind so einfach, aber ich möchte in der Lage sein, die Verschiebung zu halten, während du klickst, um ein neues Fenster zu öffnen und es in einem neuen Tab zu öffnen, wenn sie Strg gedrückt halten. Wie würde ich das tun? Außerdem muss es mit IE9 kompatibel sein.Tastenanschläge ohne Textfelder erkennen?

[Bearbeiten] Auch diese in einem Iframe sein wird

+0

Huh? –

+0

Grundsätzlich versuchen Im Tastenkombinationen hinzuzufügen. – Oztaco

+0

Live-Demo: http://jsfiddle.net/DerekL/V8yzF/show –

Antwort

1

Ich denke, Sie so etwas wie dies wollen:

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 ohne 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

auf jsfiddle, es sagt "Aus Sicherheitsgründen ist Framing nicht erlaubt; klicken Sie auf OK, um die Frames zu entfernen" – Oztaco

+0

vergiss es funktioniert gut. Aber hast du eine Version ohne jquery? – Oztaco

+0

Ich werde eins machen :-) –

1

Bind ein Keystroke-Ereignis-Listener-Fenster oder Dokument und verwenden Sie es Callback-Funktion ist zu tun, was Sie brauchen.

Wenn Sie jquery verwenden, ist es ein wenig einfacher, einen zuverlässigeren Tastenanschlag-Listener zu machen, imho. http://blog.cnizz.com/2008/10/27/javascript-key-listener/

+0

funktioniert das, wenn mein Fenster in einem iframe ist, das Fokus nicht hat? – Oztaco

+0

Oben auf meinem Kopf weiß ich nicht die Antwort auf diese Frage. Sie können es versuchen und lassen Sie uns wissen, ob es funktioniert. Meine Vermutung ist, dass es funktionieren würde. – Kristian

+0

Nein, der Iframe kann keine Tastendruckereignisse empfangen, wenn er keinen Fokus hat. – HackedByChinese

0

Also, das ist, was Sie wollen: 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 
    } 
});​ 
Verwandte Themen