我是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();
}
}
}
答案 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');
但是b
是GetActive
的本地,因此会引发参考错误。简单的解决方案是使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);
}
}