Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.05.2016, 22:42
Аспирант
Отправить личное сообщение для rodiony4 Посмотреть профиль Найти все сообщения от rodiony4
 
Регистрация: 26.10.2015
Сообщений: 97

очистить прикрепленный файл 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>

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

Последний раз редактировалось rodiony4, 18.05.2016 в 22:54.
Ответить с цитированием
  #2 (permalink)  
Старый 18.05.2016, 22:51
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

единственный способ - заменить <input type="file"> вновь созданным
Ответить с цитированием
  #3 (permalink)  
Старый 18.05.2016, 22:58
Аспирант
Отправить личное сообщение для rodiony4 Посмотреть профиль Найти все сообщения от rodiony4
 
Регистрация: 26.10.2015
Сообщений: 97

Яростный Меч, а покажите пожалуйста пример
Ответить с цитированием
  #4 (permalink)  
Старый 18.05.2016, 23:55
Аспирант
Отправить личное сообщение для rodiony4 Посмотреть профиль Найти все сообщения от rodiony4
 
Регистрация: 26.10.2015
Сообщений: 97

Сообщение от Яростный Меч Посмотреть сообщение
единственный способ - заменить <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>');	
});

Последний раз редактировалось rodiony4, 18.05.2016 в 23:58.
Ответить с цитированием
  #5 (permalink)  
Старый 19.05.2016, 09:08
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от 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(' ')+' >');
});
Ответить с цитированием
  #6 (permalink)  
Старый 19.05.2016, 11:42
Аватар для hfts_rider
Профессор
Отправить личное сообщение для hfts_rider Посмотреть профиль Найти все сообщения от hfts_rider
 
Регистрация: 26.01.2014
Сообщений: 181

Глянь сюда.
Ответить с цитированием
  #7 (permalink)  
Старый 19.05.2016, 14:41
Кандидат Javascript-наук
Отправить личное сообщение для sashgera Посмотреть профиль Найти все сообщения от sashgera
 
Регистрация: 20.09.2011
Сообщений: 140

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;
});
Ответить с цитированием
  #8 (permalink)  
Старый 19.05.2016, 16:17
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

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

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

Полная чушь, это свойство только для чтения.
Ответить с цитированием
  #9 (permalink)  
Старый 19.05.2016, 17:39
Кандидат Javascript-наук
Отправить личное сообщение для sashgera Посмотреть профиль Найти все сообщения от sashgera
 
Регистрация: 20.09.2011
Сообщений: 140

Сообщение от laimas
Полная чушь, это свойство только для чтения.
инпут file
Ответить с цитированием
  #10 (permalink)  
Старый 19.05.2016, 18:03
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно сохранить загруженный файл? 2chan Node.JS 10 03.04.2016 23:11
Преобразование Base64 в файл в IndexedDb pakskiy Общие вопросы Javascript 4 15.04.2015 13:26
Не работает файл htacces kilogram Серверные языки и технологии 16 17.04.2012 20:57
Очистить INPUT TYPE=file Nitro_Generate Общие вопросы Javascript 17 27.08.2011 14:50
Как можно достать файл из <input type="file"/> преобразовать файл в base 64 maxcab Events/DOM/Window 2 28.06.2011 22:52