2016-11-30 5 views
0

Ich habe einige Code JavaScript (jQuery) Code ausgeführt, um auf <a href=""> Klicks zu hören und ersetzen Sie es mit einem Link von einem Datenattribut.JavaScript Fenster Position neue Registerkarte nur, wenn der Benutzer will

Dies funktioniert wie vorgesehen, aber bricht einige Browser-Verhalten. Wenn der Benutzer ctrl + click auf dem Link ist (um es in einem neuen Fenster zu öffnen), wird die URL immer noch im selben Fenster geöffnet.

Wie kann ich den normalen Browser nicht brechen? Sollte ich auch feststellen, ob der Benutzer ctrl gedrückt hält und dann window.open()?

+1

'if (e.ctrlKey) window.open (...)'? –

+0

Ja, das könnte ich machen. Aber ich würde auch 'metaKey' für Mac und wahrscheinlich einige weitere Randfälle hinzufügen müssen. Gibt es keinen besseren Weg? – DenverCoder9

Antwort

0

Es geschieht, weil Sie die Standardaktion mit e.preventDefault();

so verhindern, wie Sie in Ihrer Frage erwähnt, müssen Sie in einem neuen Fenster Drücken der Strg-Taste und offen verfolgen.

if(e.ctrlKey) 
    window.open(hrefNew) 
    else 
    window.location.href = hrefNew; 

Aber wenn Sie nicht tun wollen, dann ist der einfachste Weg dynamisch href Attribut des Ankers zu setzen.

$('a.js-external').click(function(e) { 
    var hrefNew = $(this).attr('data-href'); 
    if (hrefNew) { 
     $(this).attr("href",hrefNew); 
    } 
}); 

https://jsfiddle.net/tintucraju/go44o3o3/

+1

Danke! Das Ersetzen des tatsächlichen Href-Werts scheint am besten zu funktionieren. Das Erkennen von 'ctrlKey' ist nicht genug, weil es auch einen mittleren Mausklick gibt,' metaKey' usw. Ich denke, der einzige Klick, den es nicht erkennt, ist rechte Maustaste -> in neuem Tab öffnen. – DenverCoder9

Verwandte Themen