Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Problém s Javascriptem kod (náhled)

Otázka nie je, prečo ti to nefunguje, ale prečo by to malo fungovať. :-)

1. form.getElementById - myslel si document.getElementById?
2. Vo funkcii Update_2 máš v komentári napísané, že niečo priraďuješ do premennej z. Faktom je, že premennú z priraďuješ do niečoho. Keďže si do nej nepriradil žiadnu hodnotu, tak je tam undefined.
3. Vo funkcii Update pracuješ s premennou z, ktorú si nikde nedeklaroval. Môžeš premennú z deklarovať globálne - potom by to možno niečo spravilo. Ale keďže nikde nič do nej nepriraďuješ, tak je to jedno.
4. Používaš premennú data_obr, ako keby to bola globálna premenná, pritom ti stačí lokálna.
5. form.cislo+y.value - chcel si napísať form['cislo' + y].value?
6. Si si istý, že chceš použiť innerHTML, t.j. ak niekto zadá HTML, má sa v náhľade vyrenderovať HTML alebo text?
7. Používaš globálnu premennú nahled, aby si získal prístup k prvku s id=nahled. Takéto niečo bolo odpustiteľné možno pred 10 rokmi.

To boli tie väčšie chyby, ešte si rýpnem do tých menších:

1. Atribút language="JavaScript" - to je z minulého storočia?
2. Názvy funkcií Update, Update_2 - okrem toho, že nedodržiavaš konvencie sú tie názvy dosť ničnehovoriace. Vstupný prvok name="z", srsly?
3. Komentáre typu "i = 1; // priradí jednotku do premennej i" - ::facepalm::
4. Inline zápis JS v HTML kóde sa dá prirovnať inline zápisu štýlov v HTML kóde - funguje to, ale nie je to dobre.
5. Ak plánuješ, že ten náhľad bude fungovať len s JavaScriptom, tak do toho nemiešaj server. Buď to sprav najprv tak, aby to fungovalo čisto serverovo, alebo to sprav rovno len s využitím JS.

Aby to nebolo, že len frflem, tak tu je nejaký nástrel čisto JS verzie toho, čo si myslím, že chceš dosiahnuť:

<form method="post">
Počet obrázků : <input id="count" size="2" maxlength="2"> (max.: 6)
</form>
<script>
var count = document.getElementById('count');
var preview = document.createElement('div');
var inputs = [];
var spans = [];
document.body.appendChild(preview);
count.form.onsubmit = function() {
	return false;
};
var bindInput = function(input, fn) {
	input.oninput = function(e) {
		this.onkeydown = null;
		fn.call(this, e);
	};
	input.onkeydown = function(e) {
		fn.call(this, e);
	};
};
var onInput = function(e) {
	e = e || window.event;
	var target = e.target || e.srcElement;
	for (var i = 0, n = inputs.length; i < n; ++i)
		if (inputs[i] == target) {
			spans[i].firstChild.data = target.value;
			break;
		}
};
bindInput(count, function() {
	var cnt = Math.max(0, Math.min(6, this.value));
	if (!isNaN(cnt)) {
		if (cnt < inputs.length) {
			for (var i = cnt, n = inputs.length; i < n; ++i) {
				this.form.removeChild(inputs[i]);
				preview.removeChild(spans[i]);
			}
			inputs.length = cnt;
			spans.length = cnt;
		}
		for (var i = inputs.length, n = cnt; i < n; ++i) {
			var input = document.createElement('input');
			bindInput(input, onInput);
			this.form.appendChild(input);
			inputs.push(input);
			var span = document.createElement('span');
			span.appendChild(document.createTextNode(''));
			preview.appendChild(span);
			spans.push(span);
		}
	}
});
</script>

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny