jQuery: Scambio Link quando modificatore premuto - ma il collegamento non funziona più
-
01-10-2019 - |
Domanda
Sto cercando di creare un collegamento che punta a URL 1 normalmente e per URL 2 quando il tasto shift viene tenuto premuto. Sono arrivato a questo esempio di codice, che commuta correttamente i link (come indicato nella barra di stato del browser quando si libra sopra il link), ma cliccando sulla URL 2 non funziona: il browser semplicemente non fa nulla. Proprio così:. Un link è presente, ma cliccando semplicemente non fa nulla
Abbiamo provato questo in Firefox 3.6.6 e Safari 5.0, stesso risultato in entrambi.
Eventuali suggerimenti? Grazie!
<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script>
<script>
$(document).keydown(function(event) {
if (event.keyCode == '16') {
$("#mylink").text("My Link Extended");
$("#mylink").attr("href", "http://www.google.com/");
}
});
$(document).keyup(function(event) {
if (event.keyCode == '16') {
$("#mylink").text("My Link");
$("#mylink").attr("href", "bla");
}
});
</script>
<a href="normalurl" id="mylink">My Link</a>
Soluzione
Sembra che il navigatore ha ottenuto un po 'troppo occupato aggiornamento il DOM, mentre il tasto shift è stato premuto, così ho messo una bandiera sul posto:
<script type="text/javascript">
$(document).ready(function() {
var ExtendedLinkShown=false;
$(document).keydown(function(event) {
if (!ExtendedLinkShown && event.keyCode == '16') {
$("#mylink").text("My Link Extended");
$("#mylink").attr("href", "http://www.google.com/");
ExtendedLinkShown=true;
}
});
$(document).keyup(function(event) {
if (event.keyCode == '16') {
$("#mylink").text("My Link");
$("#mylink").attr("href", "bla");
ExtendedLinkShown=false;
}
});
});
</script>
L'unico problema ora è che - come sottolineato da Romain Deveaud -. SHIFT + clic si apre una nuova finestra del browser
Altri suggerimenti
Sembra che causa il tasto shift si tiene premuto il Dom pensa che il "browser" gestirà una richiesta speciale. in modo che quando il comando viene inviato al DOM Per aprire fallisce.
Ho fatto un piccolo test e venire con questo.
<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script>
<script>
$(document).keydown(function(event) {
if (event.keyCode == '16') {
event.keyCode = null; //Remove that
$("#mylink").text("My Link Extended");
$("#mylink").attr("href", "http://www.google.com/");
event.keyCode = '16'; //Add it back
}
});
$(document).keyup(function(event) {
if (event.keyCode == '16') {
event.keyCode = null; //Remove that
$("#mylink").text("My Link");
$("#mylink").attr("href", "bla");
event.keyCode = '16'; //Add it back
}
});
</script>
<a href="normalurl" id="mylink">My Link</a>
E questo sembra funzionare in Google Chrome, ma è abbastanza hacky.