kendrick's avatar

Input field + label change logic not triggered

I am currently trying to replace a Choose a file... span with the filename of the chosen file. It worked before with the following logic. After some js changes and also implementing components, the filename will not be replaced anymore.

Is there any obvious mistake below? Or could it be a layout related problem?

<input type="file" name="filename" id="file-1" class="inputfile inputfile-1"/>
<label for="file-1">
<span class="upload-span">Choose a file... &hellip;</span>
</label>

'use strict';

        ;( function ( document, window, index )
        {
            var inputs = document.querySelectorAll( '#file-1' );
            Array.prototype.forEach.call( inputs, function( input )
            {
                var label    = input.nextElementSibling,
                    labelVal = label.innerHTML;

                input.addEventListener( 'change', function( e )
                {
                    var fileName = '';
                    if( this.files && this.files.length > 1 )
                        fileName = ( this.getAttribute( 'data-multiple-caption' ) || '' ).replace( '{count}', this.files.length );
                    else
                        fileName = e.target.value.split( '\\' ).pop();

                    if( fileName )
                        label.querySelector( 'span' ).innerHTML = fileName;
                    else
                        label.innerHTML = labelVal;
                });

                // Firefox bug fix
                input.addEventListener( 'focus', function(){ input.classList.add( 'has-focus' ); });
                input.addEventListener( 'blur', function(){ input.classList.remove( 'has-focus' ); });
            });
        }( document, window, 0 ));

0 likes
6 replies
kendrick's avatar

Could anyone try out the snippet and tell if it is also not working? Thank you in advance.

gopalsharma's avatar

Hey,

Please use one more Backslash in split function :

now we are using single backslash , so use two backslash

it's working for me

kendrick's avatar

@GOPALSHARMA - There is nothing to replace, we are on the same point here.

Well actually with only one slash, my script throws an syntactical error. If I add two slashes, the red lines dissappeares within sublime text, but it still does not work.

gopalsharma's avatar

please use two backslash in split function , i have checked that

kendrick's avatar

It was like I thought, a layout related problem.

<script src="/js/app.js"></script>
@include('layout.script.script') 

Needed to include the script below the app.js script.

Please or to participate in this conversation.