2016-02-20 34 views
1

我试图调试一个使用Firebug的函数,因为JavaScript getModifierState()方法似乎不工作。下面是函数的开头:getModifierState()作为错误返回

function kbdEq() { 
    $(document).on ('keypress', function (e) { 
    e.preventDefault(); 
    debugger; 
    var x = e.charCode || e.keyCode; 
// etc. 

跳进Firebug是简单的,但试图测试

e.getModifierState('Alt') 

(或任何其他键盘事件作为一个参数,带或不带引号)在这个结果从萤火虫消息:

e.getModifierState不是函数

我使用Firefox 44.0.2。

我在这里做了什么错误(大概)在这里?

回答

1

当您使用jQuery时,请注意包装实际事件对象的event parameter (e in your case) is a jQuery specific object

要访问原始活动,它有一个属性originalEvent。因此,访问修饰符状态,你必须这样写:

e.originalEvent.getModifierState("Alt"); 

注意,jQuery的事件对象有一些简单的方法来检查Alt键按Ctrl元是否关键被按下。这可以分别通过e.altKeye.ctrlKey,e.shiftKeye.metaKey来完成。

+0

这很对,谢谢。 1)getStateModifier比e.altKey等强大得多,因为它可以传递一个变量。 2)通过阅读有关事件objet的jQuery文档或阅读jQuery的动作,我无法想出正确的语法(e.originalEvent.getModifierState ...)您在哪里找到它?更好的来源甚至比在这里得到正确的答案更好! –

+0

附录:从jQuery开始,正确的做法是在一个依赖事件的函数开始时重新声明e.originalEvent。 –

+0

我只是将'e'对象记录到控制台,并查看了它在[* DOM *面板](https://getfirebug.com/wiki/index.php/DOM_Panel)中的属性。当我看到'originalEvent'时,我清楚这是“真正的”。它也在* OtherProperties *下的jQuery文档中提到,但我同意这种描述可能会更好。你忘了提及的是'getModifierState()'是[KeyboardEvent' API的一部分](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Methods)。因此我现在已经把它和你的问题联系起来了。 –