Как отключить определенные клавиши клавиатуры на веб-странице? - PullRequest
0 голосов
/ 11 февраля 2011

Я занимаюсь разработкой веб-страницы с использованием Wordpress 3.04, и у меня возникла следующая проблема: На этой веб-странице я реализовал скрипт, который меняет фоновое изображение каждые 10 секунд или около того.Теперь, когда пользователи нажимают клавиши «Стрелка влево» и «Стрелка вправо», фоновое изображение меняется соответствующим образом назад и вперед и портится цикл вращения.

Это становится проблемой в разделе «Форма контакта» на сайте,поскольку пользователям, которым может потребоваться перемещаться влево и вправо внутри каждого поля, вместо этого может понадобиться изменить фоновый рисунок.

Я также хотел бы отключить клавишу «Ввод», чтобы избежать отправки формы, если пользователине закончил писать свое сообщение.

Я огляделся и обнаружил этот код JavaScript, который не работал:

document.onkeydown=function DisableCTRL(e)
{
var val=(document.all)?event.keyCode:event.which; 
if(parseInt(val)==17)//CTRL
{
alert('Not Allowed!');
window.event.returnValue=false;
}
}

Этот код JS также не работал:

function stopRKey(evt) {
  var evt = (evt) ? evt : ((event) ? event : null);
  var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
  if ((evt.keyCode == 13) && (node.type=="text"))  {return false;}
}
document.onkeypress = stopRKey;

Любая помощь будет принята с благодарностью.Спасибо!

Ответы [ 2 ]

0 голосов
/ 13 августа 2013

Вам нужно вызвать e.preventDefault (), чтобы остановить событие. Я недавно написал эту функцию для обработки нежелательных ключей на сайте:

PreventIllegalKeyPress = function (e) {
if (e.target) t = e.target; //Firefox and others
else if (e.srcElement) t = e.srcElement; //IE

if (e.keyCode == 116) { //prevent F5 for refresh
    e.preventDefault();
}
if (e.keyCode == 122) { //F11 leave fullscreen
    e.preventDefault();
} else if (e.altKey && e.keyCode == 115) { //Alt + F4
    e.preventDefault();
} else if (e.altKey && e.keyCode == 37) { //Alt + left
    e.preventDefault();
} else if (e.altKey && e.keyCode == 39) { //Alt + right
    e.preventDefault();
} else if (e.ctrlKey && e.keyCode == 82) { //Ctrl + R (reload)
    e.preventDefault();
}
if (!(t.tagName == 'INPUT')) {
    if (e.keyCode == 13) { //enter
        e.preventDefault();
    }
    if (e.keyCode == 8) { //backspace
        e.preventDefault();
    }
}};

Обратите внимание на проверку t.tagName== "ВВОД".Это гарантирует, что клавиши ввода и возврата разрешены в поле ввода, но не где-либо еще.

Затем в $ (document) .ready вставьте следующий фрагмент кода для вызова функции:

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

    NFS.PreventIllegalKeyPress(e);

});

Это прекрасно работает для меня.

0 голосов
/ 11 февраля 2011

Я думаю, вы должны вызвать stop () для пропущенного события, т.е.

document.onkeydown = function(e) {
  if (e.keyCode == 17) {
    alert('Not Allowed!');
    e.stop();
  }
};

и, возможно, использовать addEventListener () . Я не уверен, что перехват клавиши Ctrl вниз фактически повернёт Ctrl. Я думаю, вам нужно перехватить курсор влево / вправо с установленным атрибутом ctrlKey. Для тестирования ключевых событий, например, см. http://unixpapa.com/js/testkey.html.

PS. document.all: http://javascript.about.com/od/hintsandtips/a/worst_4.htm

...