Отключить перетаскивание текста

Существует общая особенность современных браузеров, где пользователь может выбрать текст и перетащить его в поле ввода. Внутри одного поля он вызывает перемещение текста, между разными полями, которые он копирует. Как отключить это? Если нет портативного способа, меня больше всего интересует firefox. Это intranet webapp, поэтому я также заинтересован в изменении браузера/получении плагина для этого. Возможно, некоторые системные настройки (я на Windows XP)?

Мне нужно сохранить функциональные возможности select-copy-paste по умолчанию.

В фону есть несколько форм ввода данных с несколькими полями, и пользователи часто перетаскивают что-то по ошибке.

Ответы

Ответ 1

Этот код будет работать во всех версиях Mozilla и 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);
 }
}

Ответ 2

В архивных целях:

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

делает то, что я хотел. Вы можете добавить обработчики ondrag * для формирования элементов, также как < input ondragenter =... >

ссылка url: https://developer.mozilla.org/En/DragDrop/Drag_Operations

Ответ 3

Эта вещь работает..... Попробуйте.

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

надеюсь, что это поможет. Благодаря

Ответ 4

добавьте следующие теги в поле:

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

Ответ 5

ondraggesture поддерживается более старыми версиями Firefox вместо ondragstart.

Ответ 6

Используйте следующий код

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

и

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

Смотрите: http://jsfiddle.net/zLYGF/25/