2009-10-19 21 views
14

Istnieje wspólna cecha współczesnych przeglądarek, w której użytkownik może wybrać tekst i przeciągnąć go do pola wejściowego. W tym samym polu powoduje przenoszenie tekstu między różnymi polami, które kopiuje. Jak mogę to wyłączyć? Jeśli nie ma przenośnej drogi, interesuje mnie przede wszystkim firefox. To jest internetowa aplikacja intranetowa, więc jestem również zainteresowany modyfikacją przeglądarki/uzyskaniem wtyczki do tego. Może niektóre ustawienia na poziomie systemu (jestem na Windows XP)?wyłączanie przeciągania i upuszczania tekstu

Potrzebuję zachować domyślną funkcję wyboru-kopiowania i wklejania.

Tło to mam formularze wprowadzania danych z wielu pól, a użytkownicy często przeciągają coś przez pomyłkę.

+0

Odpowiedź pisał technicznie powinno robić, co chcesz, ale ja kwestionować swoje motywy - ci może skończyć się denerwowaniem większej liczby użytkowników niż pomocą. Może to zabrzmieć trochę naiwnie, ale jeśli ludzie nie mogą zrozumieć, jak prawidłowo używać myszy, to ich problem, a nie twój. – DisgruntledGoat

+0

Cóż, użytkownicy poprosili mnie o zaimplementowanie takiej rzeczy :) Poważnie, nigdy nie widziałem nikogo, kto użyłby tej "cechy", a ja zawiodłem tekst, który dzięki temu edytowałem więcej niż jeden raz. O sprawdzeniu, czy to działa - zrobię to jutro w pracy. – maniek

Odpowiedz

4

Ten kod będzie działać we wszystkich wersjach Mozilla i 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

dodać następujących tagów polowych:

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

Istnieje również opcja 'onselectstart', która może być przydatna. – DisgruntledGoat

+0

Dla firefox to nie wystarcza (za dużo, faktycznie), całkowicie wyłącza użycie myszy na danym polu wejściowym. Nawet nie możesz tego wybrać. Onselectstart też nie jest wystarczająco dobry. Tak więc, wciąż nie ma rozwiązania dla firefox - dla IE ondragstart robi to, co trzeba. – maniek

+0

to działa z powodu onmousedown = "return false", które faktycznie wyłącza mousedown zdarzenie, więc nic dziwnego nie możesz kliknąć – Prozi

18

Dla celów archiwalnych:

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

robi to, co chciałem. Możesz dodać ondrag * ładowarki do utworzenia elementów, zbyt, jak < wejścia ondragenter = ... >

odniesienia URL: https://developer.mozilla.org/En/DragDrop/Drag_Operations

+0

onmousedown = "return false;" działa również na firefox/chrome afaik ... może być źle ... Zauważ, że "Diabeł" może nie zrobić tego samego. – Warty

0

ondraggesture jest obsługiwany przez starsze wersje Firefoksa zamiast ondragstart.

8

To coś działa ..... Spróbuj.

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

nadzieję, że to pomaga. Dzięki

0

użyć następującego kodu

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

oraz:

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

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

Powiązane problemy