Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   очистить прикрепленный файл type="file" (https://javascript.ru/forum/dom-window/63118-ochistit-prikreplennyjj-fajjl-type%3D-file.html)

rodiony4 18.05.2016 22:42

очистить прикрепленный файл type="file"
 
Здравствуйте
Есть стилизованный инпут type="file", вместо стандартной копки - ссылка
<input type="file" name="attach-order" class="attach_order" id="attachorder" title="Прикрепить файл">

<script type="text/javascript">
$(document).ready(function(){
	$.fn.customFile = function() {
		return this.each(function() {
			var $file = $(this).addClass('customfile'),
			$wrap = $('<div class="customfile-wrap">'),
			$link = $('<a href="javascript:void(0);">'+$file[0].title+'</a>'),
			$label = $('<label class="customfile-upload" for="'+ $file[0].id +'">'+$file[0].title+'</label>'), 
			isIE = /msie/i.test(navigator.userAgent);
			$file.css({
				position: 'absolute',
				left: '-9999px'
			});
			$wrap.insertAfter($file).append( $file, ( isIE ? $label : $link ));
			$file.attr('tabIndex', -1);
			$link.attr('tabIndex', -1);
			$link.click(function () {
				$file.focus().click(); 
			});
			$file.change(function() {
				var filename = $file.val().split('\\').pop();
				$link.html(( filename ? filename : $file[0].title ));     
			});
		});
	};
	$('input[class=attach_order]').customFile(); 
});
</script>

Хочу сделать так, чтобы была возможность очистить прикрепленный файл кнопкой
так очищаю аттач:
<input type="submit" id="attach_clear" value="clear">

<script type="text/javascript">
$("#attach_clear").click(function (){
	$("#attachorder").val("");
	return false;
});
</script>


Но в tabindex остается название файла, например картинка.jpg
вот так выглядит html-код в браузере
<input tabindex="-1" style="position: absolute; left: -9999px;" name="attach-order" class="attach_order customfile" title="Прикрепить файл" type="file">
<a tabindex="-1" href="javascript:void(0);">картинка.jpg</a>

Пожалуйста, помогите, как сделать, чтобы при очистки аттача, также менялось название прикрепленного файла на текст "Прикрепить файл"
вот пример

Яростный Меч 18.05.2016 22:51

единственный способ - заменить <input type="file"> вновь созданным

rodiony4 18.05.2016 22:58

Яростный Меч, а покажите пожалуйста пример

rodiony4 18.05.2016 23:55

Цитата:

Сообщение от Яростный Меч (Сообщение 416958)
единственный способ - заменить <input type="file"> вновь созданным

пытался сделать так, обернул инпут дивом с id и кнопкой меняю в нем содержимое
<div id="zamena">
	<input type="file" name="attach-order" class="attach_order" id="attachorder" title="Прикрепить файл">
</div>

<input type="submit" id="attach_clear" value="clear">

если так, то после замены содержимого в диве #zamena в браузере мой стилизованный инпут становится стандартным
$("#attach_clear").click(function (){
	$("#zamena").html('<input type="file" name="attach-order" class="attach_order" id="attachorder" title="Прикрепить файл">');
});

в этом случае, после замены содержимого в диве #zamena при выборе файла не открывается окно обзора выбора файлов
$("#attach_clear").click(function (){
	$("#zamena").html('<div class="customfile-wrap"><input tabindex="-1" style="position: absolute; left: -9999px;" name="attach-order" class="attach_order customfile" id="attachorder" title="Прикрепить файл" type="file"><a tabindex="-1" href="javascript:void(0);">Прикрепить файл</a></div>');	
});

laimas 19.05.2016 09:08

Цитата:

Сообщение от rodiony4
после замены содержимого в диве #zamena в браузере мой стилизованный инпут становится стандартным

Нужно перед заменой получать все атрибуты элемента, вставляя их в новый.

$("#attach_clear").click(function (){
    var c = $("#zamena"), f = $("#zamena").find('input')[0].attributes;
    c.html('<input ' + [].map.call(f, function(a) {
        return a.name + '="' + a.value + '"'
    }).join(' ')+' >');
});

hfts_rider 19.05.2016 11:42

Глянь сюда.

sashgera 19.05.2016 14:41

laimas, спасибо, но ваш код не помог, по клику #attach_clear - просто удаляется имя файла, а точнее эта строка:
<a tabindex="-1" href="javascript:void(0);">картинка.jpg</a>

сделал по другому, в этой строке для ссылки сделал id:
$link = jQnoC55('<a id="zamena" href="javascript:void(0);">'+jQnoC55file[0].title+'</a>'),

ну и кнопка:
$("#attach_clear").click(function (){
	$("#attachorder").val("");//удаляем аттач из "настоящего" инпута
	$("#zamena").html('Прикрепить файл!');//меняем название прикрепленного файла на текст "Прикрепить файл"
	return false;
});

laimas 19.05.2016 16:17

Цитата:

Сообщение от sashgera
по клику #attach_clear - просто удаляется имя файла, а точнее эта строка

Какое отношение имеет ваша строка к коду показанному?

Цитата:

Сообщение от sashgera
$("#attachorder").val("");//удаляем аттач из "настоящего" инпута


Полная чушь, это свойство только для чтения.

sashgera 19.05.2016 17:39

Цитата:

Сообщение от laimas
Полная чушь, это свойство только для чтения.

инпут file

laimas 19.05.2016 18:03

Красиво аж жуть. Форму отправьте.


Часовой пояс GMT +3, время: 12:20.