2010-11-22 8 views
5

Ben, Shift tuşu durumunu izlemek için bir ihtiyaç var. Amacı, vardiya tuşu basılı tutulduğu zaman sürükle ve bırak işleminin düğüm (ler) ini KOPYALAya taşıyacaklarını ve onları taşımamayacağını kullanıcıya bildirmektir.Bağlama javascript tuşa basma olayları

ben Shift tuşunu basılı tutun ve sürükle ve bırak, kanca artık yok gerçekleştirmek eğer, ancak, aşağıdaki kod ile mükemmel bir çalışma var; Ekran artık tuşa basmayacak ve "basılı" durumda kalacaktır. Orada tahmin ediyorum

operasyonlar sorunun bir emir veya eksik parçası ya olduğunu. Javascript expers bildiriniz.

Teşekkürler!

<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

bu neden çalışmadığını bir fikrin var mı: tarayıcı tarafından ateşlenen herhangi bir olay için, shift tuşuna basıldığında gerçek olacak shiftKey özelliği, erişebilir? şüpheli kod bölümleri başarısız mı? ex: keyUpHandler bir noktada çağrılıyor mu? 'size bir fikir verebilir ... –

+1

Sürükle ve bırak bölüm nerede? Hangi kod ile ilgili * bu *? – Pointy

+0

Shift'e basıldığında gerçekten kopyalamak istiyor musunuz? Genellikle, Ctrl basılı olduğunda sistem kopyalanır ve Shift basılı tutulduğunda hareket eder. Ve gerçekten de Olay arayüzünü 'e = e || window.event ', document.all' için kontrol etmeyin ve çalışan IE olduğunu varsayalım. –

cevap

2

kodunuzu başarısız neden sürükle dahil ve kodu düşmedi, çünkü emin değilim, ama ne istediğinizi yapmak için daha kolay bir yolu var.

window.onmousemove = checkShift; 

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

Parlak! Ancak mükemmel çalışıyor, ancak sadece FireFox'ta çalışıyor gibi görünüyor. IE7 + içinde çalışmak için herhangi bir öneri? Teşekkürler. –

+0

Kodu da IE'de çalışmak üzere düzenledim. shiftKey crossBrowser, sadece doğru bir kablolama olayı meselesi ve window.event vs. özniteliğini kullanmaktır. –