Pitfall
Вы не можете поставить
document.onselectstart = function(){ return false; };
в ваш обработчик "mousedown", потому что onselectstart уже запущен.
Решение
Таким образом, чтобы это работало, вам нужно сделать это до события mousedown. Я сделал это в событии mouseover, так как как только мышь входит в мой элемент, я хочу, чтобы он был перетаскиваемым, а не выбираемым. Тогда вы можете поставить
document.onselectstart = null;
вызов события mouseout. Тем не менее, есть подвох. При перетаскивании может быть вызвано событие mouseover / mouseout. Чтобы противостоять этому, в вашем событии перетаскивания / вставки установите значение flag_dragging в true и установите его в false, когда перетаскивание останавливается (mouseup). Функция mouseout может проверить этот флаг перед установкой
document.onselectstart = null;
Пример
Я знаю, что вы не используете какую-либо библиотеку, но вот пример кода jQuery, который может помочь другим.
var flag_dragging = false;//counter Chrome dragging/text selection issue
$(".dragme").mouseover(function(){
document.onselectstart = function(){ return false; };
}).mouseout(function(){
if(!flag_dragging){
document.onselectstart = null;
}
});
//make them draggable
$(".dragme").draggable({
start: function(event, ui){
flag_dragging = true;
}, stop: function(event, ui){
flag_dragging = false;
}
});