2013-06-09 3 views
2

Как вы знаете, некоторые браузеры имеют эту функцию по умолчанию, чтобы прокручивать страницу вниз при нажатии пробела. Мне обычно нравится эта функция, но из-за характера моего веб-сайта мне нужно избавиться от нее.Не прокручивать страницу при нажатии на пробел?

Я использую

 window.onkeydown = function(e) { 
      return !(e.keyCode == 32); 
     }; 

, который ест все пробел функциональность и получает работу, однако, если пользователь вводит в комментарии или поискового запроса, и они нажмите пробел, пробел не добавляется в тексте поскольку эта функциональность была съедена.

Итак, есть способ отключить только прокручиваемую часть и оставить все остальные функции такими, какие есть?

+1

Либо поймать события, которые происходят на поля ввода/textareas, и остановить их от пузырьков до окна; или проверить цель события в своем глобальном обработчике событий. – CBroe

+0

@CBroe Thing заключается в том, что некоторые фрагменты страницы используют iFrames с внешних веб-сайтов, например. disqus комментируя систему, и я не могу поймать события от тех – Ilja

ответ

2
window.onkeydown = function(e) { 
    return !(e.keyCode == 32 && (e.target.type != 'text' && e.target.type != 'textarea')); 
}; 
+0

, это будет работайте, если я использую систему комментариев, такую ​​как disqus, которая основана на iFrames, так что комментарий для загружен с их сайта не мой? – Ilja

+0

try 'window.parent.onkeydown ...' из iFrame – ic3b3rg

+0

этот код не имеет доступа к iframe, таким образом, не повлияет на него – claustrofob

2

Может попробовать это:

window.onkeydown = function(e) { 
      if(e.keyCode == 32 && e.target.nodeName.toUpperCase() === "BODY") e.preventDefault(); 
     }; 
+0

Все еще прокручивается вниз/ – Ilja

+0

работает здесь: http://jsfiddle.net/Kq9kw/, возможно, попробуйте найти лучшую цель как окно или документ –

0

Вероятно, нужно уравнять для IE:

window.onkeydown = function(e) { 
    var evt = e || window.event; 
    var elem = evt.target || evt.srcElement; 
    if(e.keyCode == 32 && elem.nodeName.toUpperCase() === "BODY") { 
     evt.preventDefault(); 
     return false; 
    } 
}; 

(непроверенные)

Но вам нужно будет приложить событие/в каждый iframe, используя iframeref.contentWindow.

После загрузки страницы и iframe вы можете пройти через коллекцию frames[].

Смежные вопросы