2009-05-21 2 views
16

Это немного конкретный вопрос, поэтому я буду прямо в точку.Как временно отключить выбор текста с помощью JavaScript?

Я работаю над простой и простой процедурой перетаскивания для части веб-приложения, и хотя бит перетаскивания и удаления отлично работает, сайт во время операции работает с уродливым tastic, поскольку браузер все еще выполняет по умолчанию и работает при выборе текста.

Я пробовал несколько решений, в основном связанных с возвратом false из событий mousedown или click, и хотя они отключили выбор текста в некоторых браузерах, они также, похоже, полностью отключили событие mouseup, разрушая бит «drop» скрипт и оставляя эту перма-плавающую иконку, висящую вокруг мыши - не весело.

Я не хочу, чтобы выбор текста полностью исчез, я просто хочу предложить, чтобы браузер ... не делал этого, перетаскивая, если это имеет смысл. Поскольку я знаю область, которая затронута (есть iframes), я могу легко применить свойство к затронутым элементам и т. Д. Я могу при необходимости отправить код, но я ищу больше общего решения. Поскольку это только эстетическая вещь, я ищу исправление, которое работает в большинстве браузеров, на самом деле это не так важно.

Спасибо!

+0

... и начинается атака избыточных заголовков, я должен пинать себя.^_^Я действительно должен узнать, что здесь подразумевается «программный». –

ответ

18

В браузерах W3C вы можете вызвать метод preventDefault на объекте event. IE эквивалент должен установить returnValue на false.

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

EDIT: Просто перечитайте вопрос, и вы также можете предотвратить действие по умолчанию в части кода, который обрабатывает фактическое увлекая, а не только на начальном MouseDown или нажмите кнопку.

+0

Это работает, но, похоже, он убивает событие mouseup. Есть ли способ обнаружить, когда кнопка была выпущена после этого? –

+0

Подключено ли событие mouseup к объекту, который перетаскивается? Если да, попробуйте привязать его к документу или окну. Прикрепите его во время события mousedown на объекте перетаскивания, а затем в обработчике mouseup, отделите его снова. Кроме того, b/c обработчик будет выполняться в контексте объекта документа, вам нужно будет создать объявление с сохранением ссылки на объект перетаскивания. – Bryan

+0

Я получил его для работы в конце концов. Я начал перетаскивание в iFrame, а затем рисовал объект под мышью в рамке контейнера. (Цель состоит в том, чтобы «отбросить» объект на другой фрейм, весело провести время.) Поэтому вместо того, чтобы прослушивать мышь в стартовом iFrame, мне нужно было прослушивать мышь во всех кадрах, включая родителя. (iFrames, слушающий, отвечает, вызывая функцию обработки данных родителя с их позицией и т. д.). Это работает, и, похоже, все в порядке и денди со всеми браузерами. Огромное спасибо! –

0

Насколько я знаю, перетаскиваемый элемент должен располагаться над другими элементами под указателем мыши. Если он будет перемещаться с помощью указателя мыши, это предотвратит любые выборы на странице.

+1

Это не похоже на правду. Метод, который я использую, является призрачным методом, я создаю фиктивную копию объекта для перетаскивания, и он фактически не удаляется со старой страницы до тех пор, пока капля не будет успешной. –

Смежные вопросы