Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 25.09.2017, 15:47
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от RGBPlus
Свой старый использовать?
Зачем? Вы же добавляете тоже самое, а следовательно нужно взять уже существующее, клонировать, вставить, очистить поле, и удалить текст об имени и размере. Надобности хранить описание добавляемого в атрибуте кнопки нет. Если какие-то классы при добавлении нового не нужны, их нужно тоже удалить, а какие я не в курсе, ибо мне не понятно какие там "новые", а какие "старые".

Сообщение от RGBPlus
Когда выбрали файл, он меняет статус лейбла и пишет, что файл выбран
Я же написал, что это работать не будет, if ($(this).val() != '') ... в событии onchange это бред, не будет такого события вообще! Вместо этого бесполезного лучше проверять тип файла выбранного для загрузки.

Последний раз редактировалось laimas, 25.09.2017 в 15:51.
Ответить с цитированием
  #12 (permalink)  
Старый 25.09.2017, 15:49
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от RGBPlus
Выберите файл, посмотрите как изменится кнопка,
Не вижу изменений.
Ответить с цитированием
  #13 (permalink)  
Старый 25.09.2017, 15:53
Аватар для RGBPlus
Аспирант
Отправить личное сообщение для RGBPlus Посмотреть профиль Найти все сообщения от RGBPlus
 
Регистрация: 10.02.2014
Сообщений: 34

Обновите еще раз, поставил старый код:

$(document).ready(function () {
	// Форма обратной связи | Статус файла
	$('body').on('change', 'input[name="files[]"]', function(){
		if ($(this).val() != '') {
			$(this).prev().addClass('disabled');
			$(this).prev().find('.status').html('Файл выбран');
		}
	});
    // Форма обратной связи | Добавить еще один файл
	$('.button-file').on('click', function() {
		$(this).closest('.row').children().first().clone().insertBefore($(this).parent()).find('input').val('').end().find('[class|=my]').text('');
	});
    // Форма обратной связи | Загрузка файла
	$('#files-group').on('change', 'input', function(){
		var f = $(this), file, fileSize;
        if (!f.val()) {
			f.prev().addClass('disabled');
			f.prev().find('.status').html('Файл выбран');
            return;
		}
        file = this.files[0];
		fileSize = file.size > 1024 * 1024 ? Math.round(file.size * 100 / (1024 * 1024)) / 100 + ' Mb': Math.round(file.size * 100 / 1024) / 100 + ' Kb';
		f.closest('.file-upload').find('[class|=my]').first().text('Имя: ' + file.name).end().last().text('Размер: ' + fileSize);
    });
});
Ответить с цитированием
  #14 (permalink)  
Старый 25.09.2017, 15:55
Аватар для RGBPlus
Аспирант
Отправить личное сообщение для RGBPlus Посмотреть профиль Найти все сообщения от RGBPlus
 
Регистрация: 10.02.2014
Сообщений: 34

С этим кодом кнопка не работает:

$(document).ready(function () {
	
    // Добавить еще один файл
	$('.button-file').on('click', function() {
		$(this).closest('.row')
               .children()
               .first()
               .clone()
               .insertBefore($(this).parent())
               .find('input')
               .val('')
               .end()
               .find('[class|=my]')
               .text('');
	});
    
    // Загрузка файла
	$('#files-group').on('change', 'input', function(){
		var f = $(this), file, fileSize;
        if (!f.val()) {
			f.prev().addClass('disabled');
			f.prev().find('.status').text('Файл выбран');
            return;
		}
        
        file = this.files[0];
		fileSize = file.size > 1024 * 1024 ? Math.round(file.size * 100 / (1024 * 1024)) / 100 + 'MB'
                                           : Math.round(file.size * 100 / 1024) / 100 + 'KB';
		f.closest('.file-upload')
         .find('[class|=my]')
         .first()
         .text('Имя: ' + file.name)
         .end()
         .last()
         .text('Размер: ' + fileSize);
    });
});


Я понял ваш посыл, схожу еще раз перечитаю, а то немного запутался
Ответить с цитированием
  #15 (permalink)  
Старый 25.09.2017, 16:01
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

RGBPlus,
пост №10 посмотрите ... там id переделано на классы
Ответить с цитированием
  #16 (permalink)  
Старый 25.09.2017, 16:03
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Если вы хотите запретить выбор файла полем уже с выбором, то к чему такие глупости, просто так:

$('#files-group').on('change', 'input', function(){
        var f = $(this), file, fileSize;
        
        f.prev().addClass('disabled');
         
        file = this.files[0];
        fileSize = file.size > 1024 * 1024 ? Math.round(file.size * 100 / (1024 * 1024)) / 100 + 'MB'
                                           : Math.round(file.size * 100 / 1024) / 100 + 'KB';
        f.closest('.file-upload')
         .find('[class|=my]')
         .first()
         .text('Имя: ' + file.name)
         .end()
         .last()
         .text('Размер: ' + fileSize);
    });



Я ошибся, не равное пусто проверка, но она также глупа! Если файл выбран, то есть изменилось значение поля, то только в этом случае наступит событие onchange! К чему эта проверка которая ничего не дает? Пощелкайте вы диалог выбора файла с выбором и без выбора, что получите?

Запрещать же вновь сделать выбор полем думаю плохо и вряд ли вы этого хотите, а значит выбрано или не выбрано проверяют при отправке формы, но у вас не видно, чтобы это поле было обязательным для выбора.

Чего надо то?

Последний раз редактировалось laimas, 25.09.2017 в 16:10.
Ответить с цитированием
  #17 (permalink)  
Старый 25.09.2017, 16:11
Аватар для RGBPlus
Аспирант
Отправить личное сообщение для RGBPlus Посмотреть профиль Найти все сообщения от RGBPlus
 
Регистрация: 10.02.2014
Сообщений: 34

Ребята спасибо большое!

Рони предложил простой и отвечающий всем требованиям вариант!

$(function() {
		function d(a) {
			return a.on("change", 'input[name="files[]"]', function() {
				a.addClass("disabled");
				$(".status", a).text("Файл выбран");
				var c = this.files[0],
					b = 1048576 < c.size ? Math.round(100 * c.size / 1048576) / 100 + "MB" : Math.round(100 * c.size / 1024) / 100 + "KB";
				$(".my-file-name", a).text("Имя: " + c.name);
				$(".my-file-size", a).text("Размер: " + b)
			})
		}
		var b = $(".col-md-6.form-group");
		b = d(b).clone();
		$(".button-file").on("click", function() {
				$(".col-md-6.form-group:last").after(d(b.clone()))
			})
	});


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

Запрещать пользователю ни кто не чего не будет, просто показать, что файл выбран

Все проверки: размер загружаемого файла и разрешенного расширения файла, уже будет проверятся на стороне движка сайта!

Ребят: laimas и рони искренняя благодарность за помощь, еще раз спасибо )))
Ответить с цитированием
  #18 (permalink)  
Старый 25.09.2017, 16:16
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от RGBPlus
Требовалось:
При после выбора файла указать его имя + размер + изменить статус на кнопке
Ну так это же совсем иное, а то что написано было изначально так это сущий бред

Рони ничего нового не добавил, тоже самое. Вот только класс "disabled" в бутстрап, это "недоступен", отсюда и не понять чего вы хотите. Уберите его и выберите иной.
Ответить с цитированием
  #19 (permalink)  
Старый 25.09.2017, 16:22
Аватар для RGBPlus
Аспирант
Отправить личное сообщение для RGBPlus Посмотреть профиль Найти все сообщения от RGBPlus
 
Регистрация: 10.02.2014
Сообщений: 34

Рони, всю портянку объединил в один скрипт + заставил работать как требовалось. В Бустрапе использую только сетку, остальное предпочитаю сам )))

Результат: https://svetliygrad.ru/res обновил, можно посмотреть!

Еще немного доделаю недочеты и буду запускать форму!

Еще раз, спасибо!
Ответить с цитированием
  #20 (permalink)  
Старый 25.09.2017, 16:32
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от RGBPlus
Рони, всю портянку объединил в один скрипт + заставил работать как требовалось.
У рони тоже самое, написано не так, где-то кажется короче потому как используются псевоселекторы (работать будет чуть медленнее), где-то наоборот лишнее, но суть также самое потому как по другому и не ... И также два обработчика.

Сообщение от RGBPlus
В Бустрапе использую только сетку, остальное предпочитаю сам
Классы в бутсрапе определены, что вы там при этом используете не важно, класс то вы его берете и не переопределяете (и не надо), а класс disabled в бустрапе, это икона типа дорожного знака "Запрещено", это я и буду видеть. И где логика?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дублирование INPUT1 и INPUT2 в поле INPUT 3 grafb Общие вопросы Javascript 3 23.08.2020 12:15
перемещение содержимого из поля input в другое поле input при помощи нажатия на кнопк scrapmetal Events/DOM/Window 3 22.03.2015 20:45
При добавлении DOCTYPE "плывут" размеры input type=text Demath (X)HTML/CSS 4 08.07.2012 19:27
Opera не выполняет style.fontSize=... в поле input Маэстро Opera, Safari и др. 6 20.06.2011 12:03
Перенос id чекбокса в поле input azarubin Общие вопросы Javascript 7 14.01.2011 22:30