Как определить нажата какая-либо клавиша или нет?
Как определить нажата какая-либо клавиша или нет?
То есть не при нажатии, а просто в куске кода на жаваскрипте. Что-нибудь типа IsKeyDown(); ? |
стандартными средствами нет
но очевидно же как это написать: <script type="text/javascript"> (function(){ var keyDown=false; window.isKeyDown=function(){ return keyDown; }; ((function(elem, type, handler){ if (elem.addEventListener){ elem.addEventListener(type, handler, false) } else { elem.attachEvent("on"+type, handler) } return arguments.callee; })(window.document,'keydown',function(){keyDown=true})) (window.document,'keyup',function(){keyDown=false}) })() </script> <script type="text/javascript"> setInterval(function(){document.getElementById('qwe').innerHTML=isKeyDown()},100); </script> <div id="qwe"></div><br/><br/><br/> |
Ох, как-то очень сложно. Может быть можно тогда при клике по ссылке как-то проверять нажат ли Shift или Ctrl? В смысле, чтобы код бы попроще. А то я не понимаю просто.
|
<script type="text/javascript"> (function(){ var keyDown=false; window.isKeyDown=function(){ return keyDown; }; var addEvent=function(elem, type, handler){ if (elem.addEventListener){ elem.addEventListener(type, handler, false) } else { elem.attachEvent("on"+type, handler) } return arguments.callee; } addEvent(window.document,'keydown',function(event){ event = (event) ? event : window.event; keyCode=(event.charCode) ? event.charCode : event.keyCode; if(keyCode==16) keyDown='Shift (keyCode='+keyCode+')'; else if(keyCode==17) keyDown='Ctrl (keyCode='+keyCode+')'; else keyDown='Another key (keyCode='+keyCode+')'; }); addEvent(window.document,'keyup',function(){keyDown=false}); })() </script> <a href="#" onclick="this.innerHTML=isKeyDown()?('кнопка нажата: '+isKeyDown()):'кнопка не нажата';return false;">кнопка не нажата</a> при нажатии ссылки с любой зажатой кнопкой, выводится надпись о том какая кнопка была зажата, или же нет |
Бобр,
<script type="text/javascript"> function foo(e){ alert("Ctrl " + (e.ctrlKey?"нажат":"не нажат") + "\r\n" + "Shift " + (e.shiftKey?"нажат":"не нажат") + "\r\n" + "Alt " + (e.altKey?"нажат":"не нажат") + "\r\n" + "Meta " + (e.metaKey?"нажата":"не нажата")); } </script> <button onclick="foo(event)">Щелкни меня!</button> |
<script type="text/javascript"> function foo(e){ alert("Ctrl " + (e.ctrlKey?"нажат":"не нажат") + "\\r\\n" + "Shift " + (e.shiftKey?"нажат":"не нажат") + "\\r\\n" + "Alt " + (e.altKey?"нажат":"не нажат") + "\\r\\n" + "Meta " + (e.metaKey?"нажата":"не нажата")); } </script> <button onclick="foo(event)">Щелкни меня!</button>subzey, забыл заэкранировать \ |
subzey,
а теперь без рук)) всмысле не в событии)) |
Цитата:
|
PeaceCoder,
Это ж просто CRLF, зачем? Gvozd, ну, разве что, чтобы клавиши Win отслеживать. Или Esc мертвой клавишей делать а-ля-Никсы :) |
Цитата:
я подразумевал, чтобы foo() не принимала объект события. ведь не всегда есть такая возможность поэтому я в этом контексте, и говорю "а без рук" |
Gvozd,
Я просто с таким же способом возился — ненадежно это. Вдруг, какой-то несознательно поставленный обработчик сделает по keydown stopPropagation() или клавиша будет нажата пока окно не активно? Так что, имхо, без особой необходимости (или, как раз-таки, экзотических случаев типа отслеживания WinKey) делать так не стóит… |
Цитата:
|
Цитата:
|
Да, вроде, запускается и так. (Opera 10.10)
Но в любом случае, этот код был, прежде всего, для человека, потом — для браузера, и, уж в последнюю очередь, — для хайлайтера. :) |
Цитата:
|
PeaceCoder,
И впрямь! Кстати, самое забавное, что под IE6-то запускается нормально. |
Почему-то не могу добавить отзыв Gvozd . Пишут, что я должен добавить отзыв кому-то ещё. Кому? Я добавил subzey и PeaceCoder - не помогло.
|
Бобр,
фиг с ней, с кармой. я не кармодрочер. простой благодарности вполне достаточно |
Gvozd
Тогда просто благодарю! :) :victory: |
Цитата:
Так, не работает: document.getElementById('myA').addEventListener("click", function() {foo(event)}, false); Чего хочет - не говорит. |
document.getElementById('myA').addEventListener("click", foo, false); } |
document.getElementById('myA').addEventListener("click", function(e) {foo(e);}, false); }; вроде не ошибаюсь |
Цитата:
document.getElementById('myA').addEventListener("click", function(event) {foo(event)}, false); :dance: |
А мне интересно как проверять Caps Look? Гуглил, не нашёл...
|
Как любую другую клавишу - в первом посте.
|
Я имел ввиду как определить верхний регистр или нижний включён... Вот как это определять?
|
Ставлю 5 рублей, что никак иначе нежели эмпирически.)
|
Aetae,
Беспроигрышное пари. |
нашёл статью где описан способ определения, нажат ли Caps Lock http://hostdarom.com/2010/03/02/skaz...-li-caps-lock/
|
sysya,
так это ж и есть, эмпирически: дождаться нажатия, а потом посмотреть, верхняя касса, или нижняя. Страшно представить, как определить, включен ли Ins. :) |
Не знал что значит эмпирически :) А чё делает клавка Ins. Видел есть функция для определения нажат ли Num Lock, в эту сторону думаю копать. При нажатии Num Lock, на сколько знаю коды клавишь меняются в поле Num'а и чё та не все браузёры это понимают одинаково...
|
sysya,
кстати, Бирмановская раскладка заставила этот скрипт по определению капслока понервничать. :) |
window.captureEvents(Event.onkeydown); window.onkeydown= pressed; function pressed(e) { alert(e.which)} |
У меня вопрос, близкий к теме, почему во время загрузки страницы. Значение (e.which) принимает сначала 18, тут же меняет на 68 и один раз повторит после (ok) на 68. Дальше работает нормально. У меня браузер мудрит?
|
Моя (АЗБУКА НА КЛАВИАТУРЕ), часто при первом открывании начинает с ВОРОНЫ. И ещё при работе на сайте, перестали останавливаться гифки. Записаны на один просмотр. http://clecar.ru/azbyka.html
Без алерта тоже 68, только первоначальная загрузка, после обновления нормально. <head> <script> window.captureEvents(Event.onkeydown); window.onkeydown= pressed; function pressed(e) { document.all.ah.innerHTML=e.which; } </script> </head> <body> <div id="ah">0</div> </body> |
Часовой пояс GMT +3, время: 23:09. |