1

我正在尝试创建一个链接,该链接通常指向 URL 1,并在按住 shift 键时指向 URL 2。我到达了这个代码示例,它正确地切换了链接(如将鼠标悬停在链接上时在浏览器状态栏中显示的那样),但单击 URL 2 不起作用:浏览器什么也不做。没错:存在一个链接,但单击它并没有做任何事情。

在 Firefox 3.6.6 和 Safari 5.0 中尝试过,两者的结果相同。

有什么提示吗?谢谢!

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

2 回答 2

2

似乎浏览器在按下 shift 键时有点忙于更新 DOM,所以我放置了一个标志:

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

现在唯一的问题是 - 正如 Romain Deveaud 所指出的 - SHIFT+ 单击会打开一个新的浏览器窗口。

于 2010-07-01T14:48:44.507 回答
0

看起来因为按住 shift 键,Dom 认为“浏览器”将处理特殊请求。这样当命令发送到 DOM 时打开它就会失败。

我做了一个小测试并想出了这个。

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

这似乎在谷歌浏览器中工作,但非常hacky。

于 2010-07-01T14:28:56.077 回答