2009-10-19 19 views
14

C'è una caratteristica comune dei browser moderni in cui un utente può selezionare del testo e trascinarlo su un campo di input. All'interno dello stesso campo provoca lo spostamento del testo, tra diversi campi che copia. Come disabilitarlo? Se non c'è un modo portatile, sono principalmente interessato a Firefox. Questa è una webapp intranet, quindi sono anche interessato a modificare il browser/ottenere un plugin per farlo. Forse alcune impostazioni a livello di sistema (I`m su Windows XP)?disable text drag and drop

Ho bisogno di mantenere la funzionalità predefinita select-copy-paste.

Lo sfondo è I moduli di immissione dati con campo multiplo e gli utenti trascinano spesso qualcosa per errore.

+0

La risposta postato dovrebbe tecnicamente fare quello che vuoi, ma mi piacerebbe mettere in discussione le vostre motivazioni - si potrebbe finire per infastidire più utenti di quanto tu non aiuti. Può sembrare un po 'ingenuo, ma se le persone non riescono a capire come usare correttamente il loro mouse questo è il loro problema, non il tuo. – DisgruntledGoat

+0

Bene, gli utenti mi hanno chiesto di implementare una cosa del genere :) Scherzi a parte, non ho mai visto nessuno usare questa "funzione", e ho incasinato il testo che ho modificato più di una volta grazie ad esso. A proposito di verificare se funziona - lo farò domani al lavoro. – maniek

risposta

4

Questo codice funzionerà in tutte le versioni di 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

aggiungere il seguente ai tag di campo:

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

C'è anche 'onselectstart' che può essere utile. – DisgruntledGoat

+0

Per firefox questo non è abbastanza (troppo, in realtà), disabilita completamente l'utilizzo del mouse su un dato campo di input. Non puoi nemmeno selezionarlo. Anche Onselectstart non è abbastanza buono. Quindi, ancora nessuna soluzione per Firefox - per IE ondragstart fa la cosa giusta. – maniek

+0

non funziona a causa di onmousedown = "return false" che in realtà disabilita l'evento Mousedown, quindi non c'è da meravigliarsi se non si fa clic su – Prozi

18

per scopi di archiviazione:

<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();" 
> 

fa quello che volevo. È possibile aggiungere l'ondrag * gestori per formare elementi, anche, come < ingresso OnDragEnter = ... >

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

+0

onmousedown = "return false;" funziona anche su firefox/chrome afaik ... potrebbe essere sbagliato ... Nota che il "Diavolo" potrebbe non fare la stessa cosa. – Warty

0

ondraggesture è supportato da vecchie versioni di Firefox invece di ondragstart.

8

Questa cosa funziona ..... Provalo.

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

spero che sia d'aiuto. Grazie

0

Utilizzare il seguente codice

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)); 
} 

e:

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

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