2010-11-22 150 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.... 
    } 
}