0

我是 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();
        } 
    }
}
4

1 回答 1

0

在您的代码中:

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

上面的行创建了一个名为 b1 的局部变量并分配了一个新的布尔对象。我认为你只想要一个原始的,所以:

    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');

但是b是本地的,GetActive因此将引发参考错误。简单的解决方案是b全局化,多做一点工作,但最好将其保持在闭包中。

例如

(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);
  }
}
于 2012-07-12T02:51:47.800 回答