2009-10-19 39 views
14

Hay una característica común de los navegadores modernos donde un usuario puede seleccionar texto y arrastrarlo a un campo de entrada. Dentro del mismo campo causa movimiento de texto, entre diferentes campos realiza copia. ¿Cómo lo desactivo? Si no hay una forma portátil, estoy interesado principalmente en Firefox. Esta es una aplicación web de intranet, por lo que también estoy interesado en modificar el navegador/obtener un complemento para hacer esto. Tal vez algunas configuraciones de nivel de sistema (estoy en Windows XP)?desactivar texto arrastrar y soltar

Necesito mantener la funcionalidad predeterminada de seleccionar, copiar y pegar.

El fondo es que tengo formularios de entrada de datos de múltiples campos, y los usuarios a menudo arrastran algo por error.

+0

La respuesta publicado debe hacer técnicamente lo que quiere, pero me gustaría cuestionar sus motivos - usted puede terminar molestando a más usuarios de los que ayuda. Puede sonar un poco ingenuo, pero si la gente no puede entender cómo usar su mouse correctamente, ese es su problema, no el tuyo. – DisgruntledGoat

+0

Bueno, los usuarios me pidieron que implementara tal cosa :) En serio, nunca he visto a nadie usar esta "función", y he echado a perder el texto que he estado editando más de una vez gracias a él. Acerca de comprobar si funciona, lo haré mañana en el trabajo. – maniek

Respuesta

4

Este código funciona en todas las versiones de Mozilla e IE.

function preventDrag(event) 
{ 
if(event.type=='dragenter' || event.type=='dragover' || //if drag over event -- allows for drop event to be captured, in case default for this is to not allow drag over target 
    event.type=='drop') //prevent text dragging -- IE and new Mozilla (like Firefox 3.5+) 
{ 
    if(event.stopPropagation) //(Mozilla) 
    { 
    event.preventDefault(); 
    event.stopPropagation(); //prevent drag operation from bubbling up and causing text to be modified on old Mozilla (before Firefox 3.5, which doesn't have drop event -- this avoids having to capture old dragdrop event) 
    } 
    return false; //(IE) 
} 
} 

//attach event listeners after page has loaded 
window.onload=function() 
{ 
var myTextInput = document.getElementById('textInput'); //target any DOM element here 

if(myTextInput.addEventListener) //(Mozilla) 
{ 
    myTextInput.addEventListener('dragenter', handleEvents, true); //precursor for drop event 
    myTextInput.addEventListener('dragover', handleEvents, true); //precursor for drop event 
    myTextInput.addEventListener('drop', preventDrag, true); 
} 
else if (myTextInput.attachEvent) //(IE) 
{ 
    myTextInput.attachEvent('ondragenter', preventDrag); 
    myTextInput.attachEvent('ondragover', preventDrag); 
    myTextInput.attachEvent('ondrop', preventDrag); 
} 
} 
3

añadir lo siguiente a las etiquetas de campo:

#ondragstart is for IE, onmousedown is for firefox 
ondragstart="return false" onmousedown="return false" 
+0

También hay 'onselectstart' que puede ser útil. – DisgruntledGoat

+0

Para Firefox esto no es suficiente (demasiado, en realidad), deshabilita totalmente el uso del mouse en un campo de entrada determinado. Ni siquiera puedes seleccionarlo. Onselectstart tampoco es lo suficientemente bueno. Por lo tanto, todavía no hay solución para Firefox - para IE ondragstart hace lo correcto. – maniek

+0

no funciona debido a onmousedown = "return false" que en realidad desactiva el evento mousedown por lo que no es de extrañar que no pueda hacer clic en – Prozi

18

Para fines de archivo:

<body ondragstart="return false" draggable="false" 
     ondragenter="event.dataTransfer.dropEffect='none'; event.stopPropagation(); event.preventDefault();" 
     ondragover="event.dataTransfer.dropEffect='none';event.stopPropagation(); event.preventDefault();" 
     ondrop="event.dataTransfer.dropEffect='none';event.stopPropagation(); event.preventDefault();" 
> 

hace lo que quería. Puede añadir el ondrag * manipuladores para formar elementos, también, como < entrada OnDragEnter = ... >

referencia url: https://developer.mozilla.org/En/DragDrop/Drag_Operations

+0

onmousedown = "return false;" también funciona en firefox/chrome afaik ... podría estar mal ... Tenga en cuenta que el "Diablo" podría no hacer lo mismo. – Warty

0

ondraggesture es compatible con versiones anteriores de Firefox en lugar de ondragstart.

8

Esto funciona ... Pruébelo.

<BODY ondragstart="return false;" ondrop="return false;"> 

Espero que ayude. Gracias

0

Utilice el siguiente código

function allowDrop(ev) { 
    ev.preventDefault(); 
} 

function drag(ev) { 
    ev.dataTransfer.setData("Text", ev.target.id); 
} 

function drop(ev) { 
    ev.preventDefault(); 
    var data = ev.dataTransfer.getData("Text"); 
    ev.target.appendChild(document.getElementById(data)); 
} 

y:

<input type="text" ondrop="drop(event)" ondragover="allowDrop(event)"> 

Ver: http://jsfiddle.net/zLYGF/25/