我需要监控 Shift 键的状态,是向上还是向下。其目的是通知用户,当按住 shift 键时,他们将要执行的拖放操作将复制节点,而不是移动它们。
我让它与下面的代码完美配合,但是,如果我按住 Shift 键并执行拖放,钩子(Hook)将不再存在;屏幕不再响应按键并保持“按下”状态。
我猜要么是操作顺序问题,要么是遗漏了一 block 。 Javascript高手请指教。
<form id="form1" runat="server">
<div>
<table>
<tr>
<td valign="top"><ASP:Literal id="treeLeft" EnableViewState="false" runat="server" /></td>
</tr>
</table>
<asp:Label ID="lblCopyEnabled" runat="server" BackColor="Green" Text="Item will be Copied" ForeColor="White" Font-Bold="true" style="padding: 0px 10px 0px 10px; display: none" />
</div>
<script type="text/javascript">
document.onkeydown = KeyDownHandler;
document.onkeyup = KeyUpHandler;
var SHIFT = false;
function KeyDownHandler(e) {
var x = '';
if (document.all) {
var evnt = window.event;
x = evnt.keyCode;
}
else {
x = e.keyCode;
}
DetectKeys(x, true);
ShowReport();
}
function KeyUpHandler(e) {
var x = '';
if (document.all) {
var evnt = window.event;
x = evnt.keyCode;
}
else {
x = e.keyCode;
}
DetectKeys(x, false);
ShowReport();
}
function DetectKeys(KeyCode, IsKeyDown) {
if (KeyCode == '16') {
SHIFT = IsKeyDown;
}
else {
if (IsKeyDown)
CHAR_CODE = KeyCode;
else
CHAR_CODE = -1;
}
}
function ShowReport() {
var copyLabel = document.getElementById("<%= lblCopyEnabled.ClientID %>");
if (SHIFT) {
copyLabel.style.display = "inline";
ob_copyOnNodeDrop = true;
}
else {
copyLabel.style.display = "none";
ob_copyOnNodeDrop = false;
}
}
</script>
</form>
最佳答案
我不确定为什么您的代码会失败,因为您没有包含拖放代码,但是有一种更简单的方法可以完成您想要的操作。对于浏览器触发的任何事件,您可以访问 shiftKey 属性,如果按下 shift 键,该属性将为真:
window.onmousemove = checkShift;
function checkShift(e)
{
if (!e) var e = window.event;
if (e.shiftKey)
{
....Copy....
}
else
{
....Move....
}
}
关于javascript - 绑定(bind) Javascript 按键事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4250463/