2009-09-17 3 views
10

Я пытаюсь определить, нажата ли клавиша сдвига, когда курсор перемещается по определенному элементу. Функция срабатывает, но только после Сначала я нажимаю на другой элемент. Есть ли способ обойти это? Я попытался настроить фокус как на документ, так и на элемент, и попытался создать функцию псевдо-щелчка, но пока ничего не сработало.Shift + mouseover with jQuery

Например, следующий код работает только после того, как я нажимаю другой элемент на странице:

$("#selector").mouseover(function(e){ 
    if(e.shiftKey) { 
     console.log("the shift key is pressed"); 
    } 
}); 

Заранее спасибо за любую информацию.

+0

Как можно активировать действие, если оно настроено на зависание? есть некоторые другие проблемы с кодом (рядом с опубликованной частью), я подозреваю. – dusoft

+0

@dusoft: Я тестировал совершенно новый документ без каких-либо других javascript/jQuery (кроме источника jQuery) и одного элемента на странице с теми же результатами. Спасибо за предложение. –

ответ

10

проверить это на нажатие клавиши события:

$(document).keypress(function (e) { 

    if(e.shiftKey) { 
    pressed = true; // pressed is a global varialbe. Be carefull of the scope 
    } 

} 

затем на KeyUp:

$(document).keyup(function(event){ 
    pressed = false; 
}); 

затем сделать:

$("#selector").mouseover(function(e){ 
    if(pressed) { 
     console.log("the shift key is pressed"); 
    } 
}); 

или наоборот:

$("#selector").mouseover(function(e){ 
    isover = true; 
}); 

и

$(document).keypress(function (e) { 

     if(e.shiftKey) { 
     alert("do something") 
     } 

    } 
+0

Я не уверен, понял ли я 100% того, что вы пытаетесь сделать, но я думаю, что один из них должен работать. – marcgg

+0

@marcgg: Спасибо за ответ. Оказалось, что мне нужно настроить то, что я делаю немного, но это ответило на мой первоначальный вопрос. –

+1

Слишком сложный. KISS (держите его коротким и простым). Отметьте ответ Мартина Шаера! :-) – JMW

1

Я пробовал свой код, как это, и он отлично работает. Тем не менее, вам нужно «сдвинуть», а затем навести курсор мыши.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
<script type="text/javascript" src="jquery.js"></script> 
<script> 
    loadHandler = function(){ 
     $("#selector").mouseover(function(e){ 
      if(e.shiftKey) { 
       alert("the shift key is pressed"); 
      } 
     }); 
    } 
</script> 
</head> 
<body onload="loadHandler();"> 
<div style="border:1px solid black" id="selector"> 

    <br/> 
    <br/> 

    This is a div. 

    <br/> 
    <br/> 

<div> 
</body> 
</html> 

Какой тип элемента он применяется?

+0

@Mark: Он применялся к img, однако мне нужно было настроить то, что я делал. Спасибо за ваш ответ, хотя это помогло. –

8

Не нужно хранить в переменной, когда клавиша переключения нажата и отпущена. Вы можете добиться того, что вы пытаетесь сделать так:

$('#selector').mouseover(
    function(e){ 
     if (e.shiftKey) 
     { 
      console.log("the shift key is pressed"); 
     } 
    } 
); 
+1

Это должен быть правильный ответ :-) замените .click() на .mouseover() – JMW