2010-11-22 108 views
5

我需要监视Shift键的状态,无论是向上还是向下。其目的是通知用户,在按住Shift键的同时,他们即将执行的拖放操作将复制节点,而不会移动它们。绑定javascript键盘事件

但是,如果我按住Shift键并执行拖放操作,则不再存在该钩子;屏幕不再响应按键并保持“按下”状态。

我猜是有一个操作问题的顺序或缺少一块。 Javascript exper请指教。

谢谢!

<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> 
+0

你知道为什么这样不起作用吗?疑似代码段失败? `ex:keyUpHandler在某个时候被调用了吗?`可能会给你一个想法... – 2010-11-22 21:44:56

+1

拖放部分在哪里?什么代码涉及* that *? – Pointy 2010-11-22 22:30:57

回答

2

我不确定为什么你的代码失败,因为你没有包括拖放代码,但有一个更简单的方法来做你想做的事情。对于浏览器触发的任何事件,如果按Shift键,您可以访问shiftKey属性:

window.onmousemove = checkShift; 

function checkShift(e) 
{ 
    if (!e) var e = window.event; 
    if (e.shiftKey) 
    { 
    ....Copy.... 
    } 
    else 
    { 
    ....Move.... 
    } 
}