2012-07-12 170 views
0

我是新來的Javascript和我試圖做下面的代碼掃描,看看是否有一個id =「lessonNum」的文本框是活動的,如果它不是我想發送a。當按下鍵盤上的'a'時,按住ID =「A」的提交按鈕。現在,當我選擇文本框時,我收到一個提醒,但是當我沒有選擇它時,它不會提取我的keydown。請幫忙!Javascript ActiveElement和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(); 
     } 
    } 
} 

回答

0

在您的代碼:

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

上述行創建一個本地變量稱爲B1和分配一個新的Boolean對象。我想,你只是想要一個原始的,所以:

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); 
    } 
} 
+0

這很完美!我只需要在'if(b1)'語句中添加'!',因爲我希望它始終激活點擊,除非文本框處於活動狀態。謝謝! – Dropoff510 2012-07-12 03:42:41