Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    script per input file cross browser

    lo scriptino che si trova in giro ha un difetto... devo aggiungere codice

    questo scriptino fa tutto da solo, dovremo inserire solo il codice per il campo file

    non gestisce gli stile con selettore # o inline... non copia gli eventi definiti per il campo file (servono?!)

    il codice javascript mi sembra pulito e semplice da capire... testatelo per bug e miglioramenti... se vi piace bon

    codice:
    <!DOCTYPE html 
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="it">
    
    <head>
    
    	<script type="text/javascript">
    	
    (function () {
    
    	var texts = {
    	
    		en : { browse : 'Browse...' },
    		it : { browse : 'Sfoglia...' }
    	
    	} ;
    
        	(function (f) {
    
        		if (window.attachEvent)
        			window.attachEvent('onload', f);
        		else if (window.addEventListener)
        			window.addEventListener('load', f, false);
        		else
        			window['onload'] = f;
    
        	})(
    				
    		function () {
    	
    			var i ;
    			var elements = document.getElementsByTagName('input') ;
    			var file ;
    	
    			for (i = 0 ; i < elements.length ; i++) {
    			
    				// check for file fields
    			
    				if (elements[i].getAttribute('type') == 'file') {
    				
    					file = elements[i] ;
    				
    					// hide field
    					
    					file.setAttribute('style', '-moz-opacity:0.5;') ;
    					file.style.position = 'absolute' ;
    					file.style.left = '-10000px' ;
    					file.style.filter = 'alpha(opacity=0)' ;
    					file.style.opacity = '0' ;
    					
    					// create textbox
    					
    					var textbox = document.createElement('input') ;
    	
    					textbox.setAttribute('type', 'text') ;
    					textbox.setAttribute('title', file.getAttribute('title')) ;
    					textbox.setAttribute('readOnly', 'readonly') ;
    					textbox.setAttribute('className', file.getAttribute('className')) ;
    					textbox.setAttribute('class', file.getAttribute('class')) ;
    					
    					// create button
    					
    					var button  = document.createElement('input') ;
    	
    					button.setAttribute('type', 'button') ;
    					button.setAttribute('title', file.getAttribute('title')) ;
    					button.setAttribute('value', texts[navigator.browserLanguage ? navigator.browserLanguage : navigator.language].browse) ;
    					button.setAttribute('className', file.getAttribute('classbutton')) ;
    					button.setAttribute('class', file.getAttribute('classbutton')) ;
    	
    					// add button event
    	
    					(function (f) {
    	
    						if (button.attachEvent)
    							button.attachEvent('onmouseover', f);
    						else if (button.addEventListener)
    							button.addEventListener('mouseover', f, false);
    						else
    							button['onmouseover'] = f;
    	
    					})(
    					
    						(function (btn, ff) { return(function () {
    	
    							// button rect
    	
    							var x = btn.offsetLeft ;
    							var y = btn.offsetTop ;
    							var w = btn.offsetWidth ;
    							var h = btn.offsetHeight ;
    							var p = btn.offsetParent ;
    							
    							while (p) {
    							
    								x += p.offsetLeft ;
    								y += p.offsetTop ;
    							
    								p  = p.offsetParent ;
    							
    							}
    	
    							// check for mouse pointer in/out button rect
    							
    							var f = function (event) {
    							
    	      							if (event.clientX >= x && event.clientX <= (x + w - 1) && event.clientY >= y && event.clientY <= (y + h - 1)) {
    	
    	      								ff.style.left = (event.clientX - ff.offsetWidth  + 10) + 'px' ;
    	      								ff.style.top  = (event.clientY - 10) + 'px' ;
    	      							
    	      							} else {
    	      							
    	      								ff.style.left = '-10000px' ;
    	
    	      								// remove handler
    	
    	      								(function (f) {
    	      				
    	      									if (document.body.detachEvent)
    	      										document.body.detachEvent('onmousemove', f);
    	      									else if (document.body.removeEventListener)
    	      										document.body.removeEventListener('mousemove', f, false);
    	      									else
    	      										document.body['onmousemove'] = null;
    	      				
    	      								})(
    	      								
    	      									f
    	      								
    	      								) ;
    	      								
    	      							}
    							
    							} ;
    	
    	      						// add handler to move file field over the button
    	      						
    	      						(function (f) {
    	      						
    	      							if (document.body.attachEvent)
    	      								document.body.attachEvent('onmousemove', f);
    	      							else if (document.body.addEventListener)
    	      								document.body.addEventListener('mousemove', f, false);
    	      							else
    	      								document.body['onmousemove'] = f;
    	      						
    	      						})(
    	      						
    	      							f
    	      							
    	      						)
    						
    						}) })(button, file)
    	
    					) ;
    					
    					// add file field event
    	
    					(function (f) {
    	
    						if (file.attachEvent)
    							file.attachEvent('onchange', f);
    						else if (file.addEventListener)
    							file.addEventListener('change', f, false);
    						else
    							file['onchange'] = f;
    	
    					})(
    					
    						(function (txt, ff) { return(function () {
    						
    							txt.value = ff.value ;
    							
    							ff.style.left = '-10000px' ;
    						
    						}) })(textbox, file)
    	
    					) ;
    					
    					// insert new elements
    					
    					file.parentNode.insertBefore(textbox, file) ;
    					file.parentNode.insertBefore(button, file) ;
    					
    					// skip file field
    					
    					i++ ; i++ ;
    				
    				}
    				
    			}
    			
    		}
    		
    	) ;
    
    }) () ;
    
    
    </script>	
    
    
    
    
    <style>
    body {margin:100px;}
    .ff1 {background:cyan;border:1px solid red;}
    .btn1 {width:123px;color:red;}
    .ff2 {background:yellow;border:1px solid green;}
    .btn2 {width:123px;color:green}
    </style>
    	
    </head>
    
    <body>
    
    	<form action="" method="post">
    		<input type="text" name="testo" id="testo" />
    
    	
    		<input type="file" name="ff1" class="ff1" classbutton="btn1" />
    
    		<input type="file" name="ff2" class="ff2" classbutton="btn2" />
    	</form>
    
    </html>

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Potresti spiegare in due parolo cosa fa lo script e quali sono i motivi per cui qualcuno dovrebbe preferirlo al normale controllo html?

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3
    il controllo input file non è visivamente uguale in tutti i browser... è anche usando i css non si può personalizzare il pulsante

    questo script (basta solo includerlo nelle proprie pagine tramite file js, niente altro da fare) va a trovare i controlli file nella pagina "sostituendoli" con un textbox e pulsante... il file non viene rimosso, ma solo nascosto... quindi... lo html del file va sempre messo, il form funzionerà come al solito... è solo un trucco visivo

    a chi piace usare un'immagine al posto di un pulsante basterà modificare quella parte di codice

    lo scriptino che ho visto in giro usa html supplementare, css dedicati... con questo è come se un input file venisse diviso in due, come se si dovese gestire i css di un textbox e un pulsante

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.