Tengo la necesidad de controlar el estado de la tecla Shift, ya sea hacia arriba o hacia abajo. Su propósito es notificar al usuario que mientras la tecla Shift se mantiene presionada, la operación de arrastrar y soltar que están a punto de realizar va a COPY los nodos, y no los moverá.Enlace javascript keypress events
Lo tengo funcionando perfectamente con el siguiente código, sin embargo, si mantengo presionada la tecla Shift y realizo el arrastre y suelte, el gancho ya no existe; la pantalla ya no responde a la pulsación de tecla y permanece en el estado "presionado".
Supongo que hay un problema de orden de operaciones o una pieza faltante. Javascript expers por favor asesorar.
Gracias!
<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>
¿tiene alguna idea de por qué esto no está funcionando? sospecha de secciones de código que están fallando? 'ex: ¿se llama al KeyUpHandler en algún momento?' podría darte una idea ... –
¿Dónde está la parte de arrastrar y soltar? ¿Qué código está involucrado con * that *? – Pointy
¿Realmente desea copiar cuando se presiona Shift? Por lo general, el sistema copia cuando se presiona Ctrl y se mueve cuando se mantiene presionada la tecla Mayús. Y realmente deberías normalizar la interfaz del evento usando 'e = e || window.event', no busque 'document.all' y suponga que se está ejecutando IE. –