我正在开发jquery中的选择菜单替换
首先,我只需将tabindex="0"
添加到容器即可使新的选择菜单具有焦点
然后,我禁用原始选择菜单上的焦点并将焦点放在新的菜单上。
当新的一个被聚焦并且您按下向上和向下箭头时,选项会相应地改变,但是存在一个很大的问题。当你按下箭头时,身体也会移动
到目前为止,我尝试了所有这些解决方案,但没有运气:
$(window).unbind('scroll');
$(document).unbind('scroll');
$('body').unbind('scroll');
$(window).unbind('keydown');
$(document).unbind('keydown');
检查此处的代码http://pastebin.com/pVNMqyui 此代码来自Ideal Forms http://code.google.com/p/idealforms的开发版本,我即将发布,并提供键盘支持。
为什么这不起作用?
编辑:已解决!
在这篇文章中找到答案jquery link tag enable disable
var disableScroll = function(e){
if (e.keyCode === 40 || e.keyCode === 38) {
e.preventDefault();
return false;
}
};
// And then...
events.focus: function(){ $(window).on('keydown', disableScroll); }
events.blur: function(){ $(window).off('keydown', disableScroll); }
有效!
答案 0 :(得分:2)
在你的keydown处理程序中,对于向上和向下键,返回false如下:
'keydown' : function (e) {
if (e.keyCode === 40) { // Down arrow
that.events.moveOne('down');
}
if (e.keyCode === 38) { // Up arrow
that.events.moveOne('up');
}
return false;
}
此外,请确保此返回传播到浏览器的本机onkeydown,具体取决于您使用的框架/方式。
答案 1 :(得分:0)
您需要取消箭头键的keydown事件。如果已按下箭头键,请在e.preventDefault()
处理程序中使用return false
或.keydown()
。
答案 2 :(得分:0)
在这篇文章中找到答案jquery link tag enable disable
var disableScroll = function(e){
if (e.keyCode === 40 || e.keyCode === 38) {
e.preventDefault();
return false;
}
};
// And then...
events.focus: function(){ $(window).on('keydown', disableScroll); }
events.blur: function(){ $(window).off('keydown', disableScroll); }
答案 3 :(得分:-1)
它非常简单。你甚至不需要jQuery。
jQuery的:
$("body").css("overflow", "hidden");
的javascript
<body style="overflow: hidden">
添加样式:
<style>
body {width:100%; height:100%; overflow:hidden, margin:0}
html {width:100%; height:100%; overflow:hidden}
</style>
如果要绑定箭头键,请尝试以下操作:
$('body').keydown(function(e){
e.preventDefult();
if(e.keyCode == 37) // for left key
{
// implement focus functionality
}
if(e.keyCode == 38) // for up key
{
// implement focus functionality
}
if(e.keyCode == 39) // for right key
{
// implement focus functionality
}
if(e.keyCode == 40) // for doqn key
{
// implement focus functionality
}
});
答案 4 :(得分:-1)
实现同样目标的最佳方法是将正文溢出设置为隐藏
$("body").css("overflow", "hidden");
在这个过程之后只做相反的
`$("body").css("overflow", "hidden");