0

私はJavascriptを初めて使用し、次のコードスキャンを実行して、id = "lessonNum"のテキストボックスがアクティブかどうかを確認しようとしています。アクティブでない場合は、.clickを送信ボタンに送信します。キーボードの「a」を押すとid="A"になります。現在、テキストボックスを選択するとアラートが表示されますが、選択していない場合はキーダウンが表示されません。助けてください!

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 に答える