2009-05-21 15 views
16

esta es una pregunta un poco específica, así que iré directo al grano.¿Cómo puedo desactivar la selección de texto temporalmente usando JavaScript?

Estoy trabajando en una rutina de arrastrar y soltar breve y simple para parte de una aplicación web, y aunque el bit de arrastrar y soltar funciona bien, el sitio se vuelve feo y tórrido durante la operación porque el navegador todavía hace operación predeterminada y funciona en la selección de texto.

He intentado algunas soluciones que implican principalmente la devolución falsa desde el mousedown o hacer clic en eventos, y aunque deshabilitan la selección de texto en algunos navegadores, también parecen desactivar completamente el evento mouseup, arruinando el bit "drop" del secuencia de comandos y dejando este icono permanente flotando alrededor del mouse-- no es divertido.

Realmente no quiero que la selección de texto desaparezca por completo, solo quiero sugerir que el navegador ... no lo haga mientras arrastra, si tiene sentido. Como conozco el área que se ve afectada (hay iframes involucrados) puedo aplicar fácilmente una propiedad a los elementos afectados, etc. Puedo publicar el código si es necesario, pero estoy buscando más de una solución general. Dado que esto es solo una cuestión estética, estoy buscando una solución que funcione en la mayoría de los navegadores, en realidad no es tan crucial.

Gracias!

+0

... y comienza el ataque de los títulos redundantes, debería patearme a mí mismo.^_^Realmente debería aprender que "programáticamente" está implicado aquí. –

Respuesta

18

En los navegadores W3C, puede llamar al método preventDefault en el objeto event. El equivalente de IE es establecer returnValue en false.

function stopDefault(e) { 
    if (e && e.preventDefault) { 
     e.preventDefault(); 
    } 
    else { 
     window.event.returnValue = false; 
    } 
    return false; 
} 

EDIT: Sólo volver a leer la pregunta, y es posible que desee evitar que la acción predeterminada en la parte de su código que maneja el arrastre real, y no sólo en el mousedown inicial o en.

+0

Esto funciona, pero parece matar el evento mouseup. ¿Hay alguna forma de detectar cuándo se ha liberado el botón después de hacer esto? –

+0

¿El evento mouseup está asociado al objeto que se está arrastrando? Si es así, intente adjuntarlo al documento o a la ventana. Adjúntelo durante el evento mousedown en el objeto de arrastre y luego en el controlador de mouseup, sepárelo de nuevo. Además, b/c el controlador se ejecutará en el contexto del objeto del documento, tendrá que ser creativo manteniendo una referencia al objeto de arrastre. – Bryan

+0

Lo tengo para trabajar eventualmente. Empecé a arrastrar en un iFrame y luego dibujé el objeto debajo del mouse en el marco del contenedor. (El objetivo de esto es "soltar" el objeto en otro marco, diversión divertida.) Entonces, en lugar de escuchar el mouseup en el iFrame inicial, necesitaba escuchar un mouseup en todos los fotogramas, incluido el principal. (Los iFrames que escuchan responden llamando a la función de gestión de entrega de los padres con su posición, etc.) Esto funciona, y parece ir bien y elegante con todos los navegadores. ¡Gracias un montón! –

0

hasta donde sé, el elemento arrastrado debe colocarse sobre otros elementos debajo del puntero del mouse. Si se mueve con el puntero del mouse, evita cualquier selección en la página.

+1

Esto no parece ser cierto. El método que estoy usando es un método fantasma, creo una copia ficticia del objeto para arrastrar, y en realidad no se elimina de la página anterior hasta que una caída es exitosa. –

Cuestiones relacionadas