Javascript ActiveElement和Keydown事件监听器

时间:2012-07-12 01:38:25

标签: javascript

我是Javascript的新手,我正在尝试进行以下代码扫描,看看id =“lessonNum”的文本框是否处于活动状态,如果不是,我想将.click发送给提交当我按下键盘上的'a'时,id =“A”的按钮。现在,当我选择文本框时,我会收到警报,但是当我没有选择它时,它不会接收我的keydown。请帮助!

function GetActive () {

    if (document.activeElement.id == 'lessonNum') {
        alert('lessonNum is active');
        var b1=new Boolean(1);

    } else {
       var b1=new Boolean(0);
    }
}

document.addEventListener("keydown", keyDownTextField, false);

function keyDownTextField(e) {
    var keyCode = e.keyCode;

    if(keyCode==65) {

        if(b1==0) {
            alert('a has been pressed');
            document.getElementById('A').click();
        } 
    }
}

1 个答案:

答案 0 :(得分:0)

在您的代码中:

> function GetActive () {
>     if (document.activeElement.id == 'lessonNum') {
>         alert('lessonNum is active');
>         var b1 = new Boolean(1);

上面的行创建一个名为b1的 local 变量,并指定一个新的布尔对象。我想你只想要一个原语,所以:

    var b1 = true;

或整个if..else语句可以替换为:

    var b1 =  document.activeElement.id == 'lessonNum';
    if (b1) alert('lessonNum is active');

请注意,永远不会调用getActive,因此永远不会设置b1

keyDownTextField 中你有:

> if(b1==0) {
>     alert('a has been pressed');

但是bGetActive的本地,因此会引发参考错误。简单的解决方案是使b全局,更多的工作,但更好,但要将其保持在闭包中。

e.g。

(function(global) {
  var b1;
  var getActive = function () {
    b1 = document.activeElement && document.activeElement.id == 'lessonNum';

    if (b1) alert('lessonNum is active');
  }
  global.getActive = getActive;


  var keyDownTextField = function (e) {
    e = e || window.event;
    var keyCode = e.keyCode || e.which;

    if (keyCode == 65) {
        getActive();  // should it be called here?

        if (b1) {
            alert('a has been pressed'); 
            document.getElementById('A').click();
        }
    }
  }
  global.keyDownTextField = keyDownTextField;
}(this)); 

window.onload = function() {
  addEvent(document, 'keydown', keyDownTextField);
};

// Just a helper    
function addEvent(el, evt, fn){
  if (el.addEventListener) {
    el.addEventListener(evt, fn, false);
  } else if (el.attachEvent) {
    el.attachEvent('on' + evt, fn);
  }
}