2010-11-22 14 views
5

मुझे शिफ्ट कुंजी की स्थिति की निगरानी करने की आवश्यकता है, चाहे वह ऊपर या नीचे हो। इसका उद्देश्य उपयोगकर्ता को सूचित करना है कि शिफ्ट कुंजी दबाए जाने पर, ड्रैग और ड्रॉप ऑपरेशन करने के लिए वे नोड को कॉपी करने जा रहे हैं, और उन्हें स्थानांतरित नहीं कर रहे हैं।बाध्यकारी जावास्क्रिप्ट कीप्रेस घटनाएं

मैं इसे नीचे दिए गए कोड के साथ पूरी तरह से काम कर रहा हूं, हालांकि, यदि मैं Shift कुंजी धारण करता हूं और ड्रैग और ड्रॉप करता हूं, तो हुक अब मौजूद नहीं है; स्क्रीन अब कुंजी प्रेस का जवाब नहीं देती है और "दबाए गए" राज्य में बनी हुई है।

मुझे लगता है कि या तो संचालन समस्या या एक लापता टुकड़ा का आदेश है। जावास्क्रिप्ट एक्सपर्स कृपया सलाह दें।

धन्यवाद!

<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

क्या आपको पता है क्यों यह काम नहीं कर रहा है? संदिग्ध कोड खंड जो असफल हो रहे हैं? पूर्व: क्या कुंजीपैंडर को किसी बिंदु पर बुलाया जा रहा है? 'आपको एक विचार दे सकता है ... –

+1

ड्रैग और ड्रॉप भाग कहां है? * उस * के साथ क्या कोड शामिल है? – Pointy

+0

क्या आप वाकई कॉपी करना चाहते हैं जब Shift दबाया जाता है? आमतौर पर, सिस्टम दबाता है जब Ctrl दबाया जाता है और Shift दबाए जाने पर चलता है। और आपको वास्तव में 'e = e || का उपयोग करके ईवेंट इंटरफ़ेस को सामान्य बनाना चाहिए window.event', 'document.all' की जांच न करें और मान लें कि यह आईई चल रहा है। –

उत्तर

2

मैं क्यों अपने कोड विफल हो रहा है यकीन नहीं है, जब से तुम खींचें शामिल नहीं किया था और ड्रॉप कोड, लेकिन वहाँ तुम क्या चाहते करने के लिए एक आसान तरीका है। ब्राउज़र द्वारा चलाई किसी भी घटना के लिए, आप shiftKey संपत्ति है, जो अगर shift कुंजी दबाया जाता है, सच होने जा रहा है पहुँच सकते हैं:

window.onmousemove = checkShift; 

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

शानदार! पूरी तरह से काम करता है, हालांकि, यह केवल फ़ायरफ़ॉक्स में काम करता प्रतीत होता है। आईई 7 + में काम करने के लिए कोई सुझाव? धन्यवाद। –

+0

मैंने आईई में भी काम करने के लिए कोड संपादित किया। shiftKey crossBrowser है, यह सिर्फ तारों की घटना का सही मायने रखता है और window.event बनाम विशेषता का उपयोग कर रहा है। –

संबंधित मुद्दे