ugrás a tartalomhoz

Nem működő tallózás gomb

Marcell · 2007. Aug. 6. (H), 13.31
Sziasztok!

Ismét egy igazi csemegével szolgálhatok... :) A probléma lényege röviden annyi, hogy az egyik oldalamon nem működik a fájl tallózás.. legalábbis egyes gépeken, egyes embereknél. Kb 400 emberből 2-nél nem ment eddig, tehát elég kicsi a szórás, mégis roppant idegesítő, mert a regisztráció egyik lépcsőjénél létfontosságú lenne a működése (tényleg!).

A visszajelzések alapján hiába kattintanak a tallózás gombra, nem jelenik meg a kis fájl tallózó ablak - én élőben még nem tudtam reprodukálni ezt semmilyen böngészővel, de állításuk szerint sem IE6-ban, sem Firefox 2.02-ban nem ment - Windows XP alatt. Ezek alapján én arra gyanakszom, hogy valami más hiba lehet (javítócsomag hiánya, többlete, vmilyen vírus stb), de akkor meg ugye máshol sem működne a dolog nekik... szóval teljesen tanácstalan vagyok.

A helyzetet bonyolítja, hogy nem "sima" tallózás gombot használok, hanem egy igényre szabottat, JS + CSS megoldással. A vázát itt is megadom, a dolog alapja a http://www.quirksmode.org/dom/inputfile.html

Alap JS:
  1. function cssFileForm(form, input, output) {  
  2.     if (!document.getElementById) return;  
  3.       
  4.     var x = document.getElementById(input);  
  5.   
  6.     x.onchange = x.onmouseout = function () {  
  7.               
  8.         // fájlnév levágása a \ jel mentén  
  9.         pozicio = this.value.lastIndexOf("\\");  
  10.         hossz = this.value.length;  
  11.         fajlnev = this.value.substring(pozicio+1, hossz);  
  12.   
  13.         eval("document."+form+"."+output+".value='" + fajlnev + "'");  
  14.   
  15.     }  
  16. }  
Paraméterezve meghívva:
  1. function init_zenekarform() {  
  2.     cssFileForm('zenekarform''kep_input''kepnev_input');  
  3. }  
  4. if (window.attachEvent) window.attachEvent("onload", init_zenekarform);   
  5. else window.addEventListener("load", init_zenekarform, false);  
CSS:
  1. div.fileinputs {  
  2.     positionrelative;  
  3.     top: 7px;  
  4.     displayinline;  
  5.     margin-bottom-10px !important;  
  6.     cursorpointer;  
  7. }  
  8.   
  9. div.fakefile {  
  10.     positionabsolute;  
  11.     top: 4px;  
  12.     left: 0px;  
  13.     z-index1;  
  14.     width200px;  
  15. }  
  16.   
  17. div.fakefile input {  
  18.     margin-right4px;  
  19. }  
  20.   
  21. input.file {  
  22.     positionrelative;  
  23.     left: 2px;  
  24.     z-index2;  
  25.     opacity: 0;  
  26. }  
És a generált HTML:
  1. <div class="fileinputs">  
  2.     <input type="file" class="file" name="kep_input" id="kep_input" onchange="eltuntetes('kep')" />  
  3.     <div class="fakefile"><input id="kepnev_input" />tallózás</div>  
  4. </div>  
Szívesen belinkelem élőben is a lapot, de nem akarom, hogy rögtön rekámnak tűnjön a téma.
 
1

kis segítség az értelmezéshez

Marcell · 2007. Aug. 6. (H), 13.36
Még annyit tennék hozzá, hogy az alap JS kb arról szól, hogy egy text típusú inputban jeleníti meg (csak) a fájlnevet.
2

kikapcsolt js?

zila · 2007. Aug. 6. (H), 18.34
Ha kikapcsolod a js-t akkor mi történik?
A js-ben miért eval-lal írod bele a filenevet a text mezőbe?
3

nem akadály

Marcell · 2007. Aug. 7. (K), 10.58
Ha ki van kapcsolva a JS, akkor csak annyi a különbség, hogy nem látja a fájlnevet, amit kiválasztott - de ettől függetlenül teljesen jól működik a funkció (próbáltam több böngészőben).

Hogy miért eval-lal csináltam, már nem tudom... Valószínűleg azért, mert úgy egyszerűbb volt belefűznöm a parancsba a változókat, de ez a működés szempontjából nem is annyira lényeges...
4

getElementById

zila · 2007. Aug. 7. (K), 15.25
eval("document."+form+"."+output+".value='" + fajlnev + "'");


helyett
  1. document.getElementById('kepnev_input').value = fajlnev;  
5

ok

Marcell · 2007. Aug. 7. (K), 23.30
Rendben ezt átírhatom erre, de szted ezzel meg fog oldódni a probléma? :)
6

szerintem...

zila · 2007. Aug. 8. (Sze), 13.12
... igen. (amennyiben a filenev parserben nincs hiba :)

Ja most látom, hogy backslash mentén darabolsz. Az meg csak windows-nál van. unixon / a path elválasztó. régebbi apple rendszereken meg a :