Jquery не меняется label в input file

187
02 января 2020, 03:10

Имеется input file внутри формы (form), а форма внутри списка(ul).

  <ul id="file{{ $theme->id }}" class="collapse tree" aria-labelledby="file" >
    <form class="form ml-2 mb-2 mt-0" role="form" id="form{{ $theme->id }}" method="POST" action="{{ url('') }}" enctype="multipart/form-data">
 @csrf
 <input type="hidden" name="themeId" value="{{ $theme->id }}">
 <input type="file" name="themesFiles[]" id="themesFiles{{ $theme->id }}" class="inputfile-addThemeFile"  multiple="true"/>
 <label for="themesFiles{{ $theme->id }}" class="btn btn-sm btn-primary inputlabel-addThemeFile{{ $theme->id }} mb-0">
 <i class="fas fa-plus-square h5-responsive white-text pr-2" title="Добавить файлы"></i>
Добавить файлы
</label>
</form>
</ul>

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

<script>
$('#themesFiles{{ $theme->id }}').change(function(e){
$('.inputlabel-addThemeFile{{ $theme->id }}').html('<div class="spinner-border text-info" role="status"><span class="sr-only"></span></div><br> <small>файлы ожидают загрузки</small>');
});
</script>

Но ничего не происходит, в консоле все чисто, ID инпута и скрипта совпадают. Заранее благодарю за помощь)

Answer 1

Очевидно, проблема в конструкции {{ $theme->id }}. В разметке, видимо, туда подставляется какое-то значение. А в скрипте не подставляется: в скрипте вот это вот всё '#themesFiles{{ $theme->id }}' - одна строчка, т.е. скрипт ожидает именно такого селектора и не получает его.

Если убрать из когда {{ $theme->id }}, то всё работает:

$('#themesFiles').change(function(){ 
	$('.inputlabel-addThemeFile').html('<div class="spinner-border text-info" role="status"><span class="sr-only"></span></div><br> <small>файлы ожидают загрузки</small>'); 
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 
<ul id="file" class="collapse tree" aria-labelledby="file" > 
    <form class="form ml-2 mb-2 mt-0" role="form" id="form" method="POST" action="{{ url('') }}" enctype="multipart/form-data"> 
 <input type="hidden" name="themeId" value=""> 
 <input type="file" name="themesFiles[]" id="themesFiles" class="inputfile-addThemeFile"  multiple="true"/> 
 <label for="themesFiles" class="btn btn-sm btn-primary inputlabel-addThemeFile mb-0"> 
 <i class="fas fa-plus-square h5-responsive white-text pr-2" title="Добавить файлы"></i> 
Добавить файлы 
</label> 
</form> 
</ul>

READ ALSO
Активность пользователя и блокировка

Активность пользователя и блокировка

Пользователь оставляет открытой страницу браузера (может не появляться сутки), но так как страница открыта, то все фоновые Ajax-запросы выполняются...

167
Остановить анимацию и вызвать ее callback?

Остановить анимацию и вызвать ее callback?

Эксперты, необходимо остановить анимацию jquery и вызвать callback-функцию, как остановить я знаю,stop(true, true), но как вызвать callback-функцию этой анимации...

179
JQuery each event

JQuery each event

Есть плагин JQuery, который работает с элементами на странице

198
Slick слайдер / Движение от края к краю

Slick слайдер / Движение от края к краю

возникла такая задачка, имеется слайдер 100% ширины,имеется slickjs,задачка в том, что слайдер изначально показывает 2 слайда с левой стороны экрана,...

167