$(document).ready(function(){
$(document).bind('keydown',function(e){
key = e.keyCode;
if(key == 37){
left();
}else if(key == 38){
up();
}else if(key == 39){
right();
}else if(key == 40){
down();
}
});
alert("Hi");
});
“嗨”只会提醒一下我如何在$(document).bind
开始后突破?可能是break;
或return;
之类的东西?
答案 0 :(得分:6)
“嗨”只提醒一次,因为它不在keydown
处理程序中......它在ready
处理程序中。
$(document).ready(function(){
$(document).bind('keydown',function(e){
key = e.keyCode;
if(key == 37){
left();
}else if(key == 38){
up();
}else if(key == 39){
right();
}else if(key == 40){
down();
}
});// keydown handler ends here
alert("Hi");
});
另外作为旁注,请尝试使用console
方法而不是alert()
,因为它可能更具描述性且无阻塞。
<强>更新强>
我可以从下面的评论中看到你对你的代码中实际发生的事情感到很困惑......所以让我们一步一步。
$(document).ready(function(){
在这里,您将处理程序绑定到DOM ready
事件。当浏览器完成文档结构的构建时,这会被触发。它不会考虑任何需要加载的外部资产。
$(document).bind('keydown', function(e){
现在我们将处理程序绑定到keydown
事件。当keydown
事件冒泡到document
级别时,函数内的任何内容(以及函数中的 )都将被执行。
key = e.keyCode;
您可以将事件的keyCode
属性分配给key
变量。我建议在其前面加上关键字var
,以保持范围。 var key = e.keyCode;
if(key == 37){
left();
}else if(key == 38){
up();
}else if(key == 39){
right();
}else if(key == 40){
down();
}
现在,您正在浏览一系列if
/ else
块,并呼叫left
,up
,right
和down
如果先前声明的key
变量与您的某个条件匹配,则函数。
});
这是keydown
处理程序的 END 。
alert("Hi");
在这里alert()
发送一条消息。这是在keydown
处理程序为BOUND之后直接完成的,但不是在每次执行或执行所述处理程序之后。该行作为文档ready
处理程序的一部分执行ONCE。
});
这是文档ready
处理程序的结尾。
答案 1 :(得分:0)
我想,你不想多次使用keydown
。
$(document).ready(function(){
$(document).on('keydown',function(e){
key = e.keyCode;
if(key == 37){
left();
}else if(key == 38){
up();
}else if(key == 39){
right();
}else if(key == 40){
down();
}
$(document).off('keydown');
});// keydown handler ends here
alert("Hi");
});
或者你可以使用只发射一次的one()。
$(document).ready(function(){
$(document).one('keydown',function(e){
key = e.keyCode;
if(key == 37){
left();
}else if(key == 38){
up();
}else if(key == 39){
right();
}else if(key == 40){
down();
}
});// keydown handler ends here
alert("Hi");
});