jQuery: ссылка меняется, когда модификатор удерживается - но ссылка останавливает работу

StackOverflow https://stackoverflow.com/questions/3158651

Вопрос

Я пытаюсь создать ссылку, которая указывает на URL 1 обычно и URL 2, когда клавиша Shift удерживается. Я прибыл в этот образец кода, который правильно переключает ссылки (как указано в строке состояния браузера при парении по ссылке), но нажатие на 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>
Это было полезно?

Решение

Кажется, браузер получил немного слишком занят обновлением DOM, пока была нажата клавиша Shift, поэтому я помещаю флаг:

<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 Devalud - СДВИГ + Нажмите открывает новое окно браузера.

Другие советы

Похоже, потому что клавиша 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>

И это, кажется, работает в Google Chrome, но довольно хаки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top