I trying to customize HTML file input and wrote simplest jquery API function:
(function($)
{
$.fn.selectFileInputGUI = function()
{
var outerWrapper = $('<div>').css({'display':'inline-block'});
var innerWrapper = $('<div>').css({'width':'0', 'height':'0', 'overflow':'hidden'});
var fileInput = $('<input>').attr({type:'file'});
var fileNameHTML = $('<div>').css({'display':'inline-block', 'margin-left':'3px'});
var selectBtnGUI = $('<button>').addClass('btn btn-success btn-sm').text('Select file').click(function()
{
$.fn.selectFileInputGUI.resetInput();
fileInput.trigger('click');
});
fileInput.on('change', function()
{
$.fn.selectFileInputGUI.displayFileName();
});
$(this)
.append(outerWrapper.append(innerWrapper.append(fileInput)).append(selectBtnGUI))
.append(fileNameHTML);
$.fn.selectFileInputGUI.displayFileName = function()
{
var fileName = fileInput.val();
if(fileName.length > 0)
{
var pos = fileName.lastIndexOf("\\");
if(pos != -1) fileName = fileName.substr(pos + 1);
if(fileName.length > 14) fileName = fileName.substr(0, 14) + '...';
} else
{
fileName = 'File not selected';
}
fileNameHTML.text(fileName);
};
$.fn.selectFileInputGUI.resetInput = function()
{
fileInput.wrap('<form>').parent('form').trigger('reset');
fileInput.unwrap();
};
}
})(jQuery);
When I trying to apply selectFileInputGUI api function to the several selectors, only last selector handles well - http://jsfiddle.net/URKM5/5/
How to implement it correctly?