jQuery: Link zu ändern, wenn Modifier gedrückt gehalten wird - aber Link funktioniert nicht mehr
-
01-10-2019 - |
Frage
Ich versuche, einen Link, dass Punkte auf URL erstellen 1 normal und URL 2, wenn die Shift-Taste gedrückt wird. Ich kam in diesem Codebeispiel, die richtig die Links-Schalter (wie in der Browser-Statusleiste angezeigt, wenn sie über den Link schwebt), aber auf URL klicken 2 nicht funktioniert: der Browser einfach nichts tut. Das ist richtig: a. Link vorhanden ist, aber Klicken auf es funktioniert einfach nichts tun
versucht, diese in Firefox 3.6.6 und Safari 5.0, das gleiche Resultat in beiden.
Für Hinweise? Dank!
<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>
Lösung
Es scheint der Browser ein wenig zu sehr damit beschäftigt Aktualisierung den DOM bekam, während die Shift-Taste gedrückt wurde, so dass ich eine Flagge in Kraft gesetzt:
<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>
Nur jetzt Problem ist, dass - Wie von Romain Deveaud -. SHIFT + Klicken Sie auf ein neues Browserfenster öffnen
Andere Tipps
Es sieht aus wie, weil die Shift-Taste gedrückt gehalten wird der Dom denkt, dass der „Browser“ wird eine besondere Anforderung verarbeiten. so dass, wenn der Befehl an das DOM gesendet wird Um sie zu öffnen scheitert.
ich einen kleinen Test gemacht und kommen mit dieser.
<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>
Und das scheint zu funktionieren in Google Chrome, aber es ist ziemlich hacky.