2013-05-03 101 views
1

我有一个事件,我想在每当触发RSPACE被按下时,除了在输入字段中时。防止在选择输入框时触发键盘事件

具体而言,我很担心<input id='nameInput' type='text'>,我在动态创建时点击div并删除onchange/onblur。这就是为什么我试图检查if(!$('#nameInput')),但$('#nameInput')是一个jQuery对象,所以它的布尔值总是true(因此!$('#nameInput') == false)。

$(window).bind('keyup', 
    function(e) { 
    var code = (e.keyCode ? e.keyCode : e.which); 
    if(code == 32 || code == 82){ 
     if(!$('#nameInput')){ 
     roll(); 
     } 
    } 
    } 
); 

我有利用在输入字段的聚焦状态越来越设置一个全局布尔变量的解决方案,但我想这并不需要一个全局变量,如果有可能的解决方案。

有没有方法可以确定哪些元素当前有焦点?

+0

谢谢@Alexey,不知道如何让这些看起来都很漂亮。 – mduleone 2013-05-03 01:34:08

回答

3

您可以使用document.activeElement来了解当前有哪些焦点。

if (!$(document.activeElement).is('input, textarea')) { 
    roll(); 
} 

您还可以使用:focus选择器。

if (!$(':focus').is('input, textarea')) { 
    roll(); 
} 
+0

这是完美的!谢谢! – mduleone 2013-05-03 01:33:26

+0

再次感谢,我去了: var active = $(document.activeElement); if(active [0] === $('#nameInput')[0]){ return; } roll(); – mduleone 2013-05-03 01:38:22

+0

@mduleone,你不想相反吗?当'nameInput'没有被聚焦时,然后滚动?此外,您可以使用'$(document.activeElement).is('#nameInput')' – plalx 2013-05-03 01:44:16

相关问题