jQuery: ссылка меняется, когда модификатор удерживается - но ссылка перестает работать - PullRequest
1 голос
/ 01 июля 2010

Я пытаюсь создать ссылку, которая обычно указывает на 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>

Ответы [ 2 ]

2 голосов
/ 01 июля 2010

Кажется, что браузер стал слишком занят обновлением 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>

Единственная проблема сейчас заключается в том, что - как указал Ромен Дево - SHIFT + Клик открывает новое окно браузера.

0 голосов
/ 01 июля 2010

Похоже, что клавиша 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, но довольно забавно.

...