Как запретить событию drag & drop реарировать на всё кроме файлов?

//Загружаем 
var loadFile = $('#ads_panel_pc'),
	maxFileSize = 100*1024*1024; // максимальный размер фалйа.

// Проверка поддержки браузером
if (typeof(window.FileReader) == 'undefined') {
	$("#error").html("<h3>Внимание!</h3><p>Не поддерживается браузером!</p>");
}

// Добавляем класс hover при наведении
loadFile[0].ondragover = function(event) {
	$('#drag_and_drop_file').show();
	return false;
};

$('#drag_and_drop_file')[0].ondragleave = function() {
	$('#drag_and_drop_file').hide();
}

// Убираем класс hover
loadFile[0].ondragleave = function() {
	return false;
};

// Обрабатываем событие Drop
loadFile[0].ondrop = function(event) {
	$('#drag_and_drop_file').hide();
	event.preventDefault();
	if (event.dataTransfer.files[0]) {		 
		var file = event.dataTransfer.files[0];
		// Проверяем размер файла
		if (file.size > maxFileSize) {
			$("#error").html("<h3>Внимание!</h3><p>Файл слишком большой!</p>");
			return false;
		}
		var params = new FormData();
			params.append('file', file);
		// Создаем запрос
		var xhr = getXmlHttpRequest();
			xhr.upload.addEventListener('progress', uploadProgress, false);
			xhr.onreadystatechange = stateChange;
			xhr.open('POST', '/components/ajax/ajax.php?task=ReadFileAds');
			xhr.setRequestHeader("X-Header", encodeURIComponent(file.name));
			xhr.send(params);
	}
};

// Показываем процент загрузки
function uploadProgress(event) {
	var percent = parseInt(event.loaded / event.total * 100);
		$('#status_load_file').css({width: percent+'%'}).html('<center>Загрузка: ' + percent + '%</center>');
}

// Пост обрабочик
function stateChange(event) {
	$('#drag_and_drop_file').hide();
	if (event.target.readyState == 4) {
		if (event.target.status == 200) {
			console.log(event.target.responseText);
		} else {
			$('#error').html('<h3>Внимание!</h3><p>Произошла ошибка!</p>');
		}
	}
	$('#status_load_file').html('');
}

Код работает нормально, за исключением одного, если я выделяю текст и начинаю его перетаскивать срабатывает событие $('#drag_and_drop_file').show();
Как от этого избавиться?
  • Вопрос задан
  • 1049 просмотров
Решения вопроса 1
lazalu68
@lazalu68
Salmon
Кажется браузер не даёт ивенту ondragover такой информации (1, 2), так что вероятно придётся устанавливать некую переменную в true при mousedown/ondragstart для document и соответственно проверять её в ondragover.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы