georgich
@georgich

Как удалить динамически добавленный div?

Приветствую всех!
Я совсем уже отчаялся, голова не варит и полное горе. Задача: необходимо динамически добавлять div, в котором будут содержаться img (для превью картинок) и input (для выбора этих самых картинок).
<div class="uploader">
	<div id="addPhotos" class="uploader-add js-upload-add">Добавить фото</div>
</div>

function addPhoto() {
	$(".uploader").before('<div class="preview js-preview column" style="display: none;"><img class="js-preview-img" src="" style="max-width: 100px; height: 75px;"><input type="file" name="photos[]" value="" id="photos" style="width: 100px; height: 75px; opacity: 0; position: relative; display: block; top: -79px;" accept="image/jpeg,image/jpg,image/png,image/gif"></div>');
	$('input#photos').last().click();
	previewPhoto();
}

function previewPhoto() {
	$('input#photos').on('change', function() {
		var previewImg = $(this).prev();
		var curFiles = $(this)[0].files;
		var previewDiv = $(this).parent();

		if (curFiles[0]) {
			previewImg.attr('src', window.URL.createObjectURL(curFiles[0]));
			previewDiv.removeAttr("style");
		} else {
			previewDiv.remove();
		}
	});
}
$(document).ready(function() {
	$(".js-upload-add").click(function() {
		addPhoto();
	});
	previewPhoto();
});

Как работает код: по клику на div addPhotos создается блок, внутри которого есть img и input и сразу после создания блока симулируется нажатие на кнопку выбора файла у input'а. Если файл выбран, то он отобразиться в превью, а если будет нажата отмена, то блок с превью и инпутом так и будет иметь свойство style="display: none;". Мне же необходимо, если файл не выбран, то удалять этот скрытый блок. Именно так у меня реализовано в previewPhoto(). А как сделать это в addPhoto() я уже за весь день всю голову сломал. Пытался сделать через событие onchange, но не выходит.
Помогите, пожалуйста! Спасибо!
  • Вопрос задан
  • 328 просмотров
Решения вопроса 1
georgich
@georgich Автор вопроса
В общем пошел другим путем. Сделал удаление блоков непосредственно перед отправкой данных на сервер:
$(".js-preview:hidden").remove();
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Izy
@Izy
Учу
если я правильно понял то событием клик все решается.
Ответ написан
Aligatro
@Aligatro
Turn food and coffee into software...
function addPhoto() {
	$(".uploader").before('<div class="preview js-preview column" style="display: none;"><img class="js-preview-img" src="" style="max-width: 100px; height: 75px;"><input type="file" name="photos[]" value="" id="photos" style="width: 100px; height: 75px; opacity: 0; position: relative; display: block; top: -79px;" accept="image/jpeg,image/jpg,image/png,image/gif"></div>');
	$('input#photos').last().trigger( "click" );
	previewPhoto();
}


Мне сложно понять что делает этот код без примера, но насколько я понял из вашего описание вы хотите эмулировать клик по элементу. Делается это при помощи .trigger( "click" ), просто .click() это listener на событие.

Детальнее в документации.
Ответ написан
Exploding
@Exploding
wtf?
Может быть подойдет обработка oninput?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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