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:
function cssFileForm(form, input, output) {
	if (!document.getElementById) return;
	
	var x = document.getElementById(input);

	x.onchange = x.onmouseout = function () {
			
		// fájlnév levágása a \ jel mentén
		pozicio = this.value.lastIndexOf("\\");
		hossz = this.value.length;
		fajlnev = this.value.substring(pozicio+1, hossz);

		eval("document."+form+"."+output+".value='" + fajlnev + "'");

	}
}
Paraméterezve meghívva:
function init_zenekarform() {
	cssFileForm('zenekarform', 'kep_input', 'kepnev_input');
}
if (window.attachEvent) window.attachEvent("onload", init_zenekarform);	
else window.addEventListener("load", init_zenekarform, false);
CSS:
div.fileinputs {
	position: relative;
	top: 7px;
	display: inline;
	margin-bottom: -10px !important;
	cursor: pointer;
}

div.fakefile {
	position: absolute;
	top: 4px;
	left: 0px;
	z-index: 1;
	width: 200px;
}

div.fakefile input {
	margin-right: 4px;
}

input.file {
	position: relative;
	left: 2px;
	z-index: 2;
	opacity: 0;
}
És a generált HTML:
<div class="fileinputs">
	<input type="file" class="file" name="kep_input" id="kep_input" onchange="eltuntetes('kep')" />
	<div class="fakefile"><input id="kepnev_input" />tallózás</div>
</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

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 :