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

// uložíme si count, inputs a images elementy do premenných, aby sme k nim mohli jednoducho pristupovať
var count = document.getElementById('count');
var inputs = document.getElementById('inputs');
var images = document.getElementById('images');
// pomocná funkcia, ktorá naviaže obsluhu stlačenia klávesy na vstupný prvok formulára
// využíva oninput z HTML5 (ktorý sa volá po každej zmene hodnoty) s fallbackom pre staršie prehliadače na onkeydown (ktorý sa volá po každom stlačení klávesy)
var bindInput = function(input, fn) {
	input.oninput = function(e) {
		this.onkeydown = null;
		fn.call(this, e);
	};
	input.onkeydown = function(e) {
		fn.call(this, e);
	};
};
// táto funkcia sa bude volať pri zmene hodnoty vo vygenerovaných textových poliach
// používame časovač, aby sa obrázok začal načítavať až po nejakom čase nečinnosti
var onInput = function(e) {
	// fallback pre staršie prehliadače (e = udalosť, target = prvok, ktorý danú udalosť vyvolal)
	e = e || window.event;
	var target = e.target || e.srcElement;
	// ak časovač čaká, aby mohol načítať obrázok, ...
	if (target.timer) {
		// ...tak ho zrušíme, pretože hodnota sa zmenila a budeme načítavať iný obrázok
		clearTimeout(target.timer);
		target.timer = null;
	}
	// zistíme index textového prvku, v ktorom sa zmenila hodnota, aby sme mohli zmeniť adresu obrázka s rovnakým indexom
	// prebehneme cez všetky deti prvku so vstupnými prvkami
	for (var input = inputs.firstChild, i = 0; input; input = input.nextSibling, ++i)
		// ak sme našli vstupný prvok, v ktorom sa zmenila hodnota, ...
		if (input == target) {
			// ...nastavíme časovač, ...
			target.timer = setTimeout(function() {
				// ...aby nastavil adresu obrázka...
				images.childNodes[i].src = target.value;
				target.timer = null;
			// ...po pol sekunde nečinnosti 
			}, 500);
			// našli sme, čo sme chceli, tak ukončíme cyklus
			break;
		}
};
// táto funkcia sa volá pri zmene hodnoty v textovom poli s počtom prvkov
var onCountInput = function(e) {
	// z hodnoty v poli prečítame počet a obmedzíme ho na hodnoty 1 až 6
	var count = Math.max(1, Math.min(6, this.value));
	// ak v poli nebola číselná hodnota, ...
	if (isNaN(count))
		// ...použijeme predvolenú hodnotu 1
		count = 1;
	// zistíme aktuálny počet vstupných polí
	var actual = inputs.childNodes.length;
	// pokiaľ je požadovaný počet menší ako aktuálny počet (ktorý postupne zmenšujeme), ...
	while (count < actual--) {
		// ...odstránime posledné vygenerované vstupné pole...
		inputs.removeChild(inputs.lastChild);
		// ...a jemu prislúchajúci obrázok
		images.removeChild(images.lastChild);
	}
	// pokiaľ je aktuálny počet menší ako požadovaný počet (aktuálny počet vždy zväčšujeme), ...
	while (++actual < count) {
		// vygenerujeme nové textové pole...
		var input = document.createElement('input');
		// ...s požadovaným názvom...
		input.name = 'cislo' + (actual + 1);
		// ...a naviazanou obslužnou funkciou,...
		bindInput(input, onInput);
		// ktoré pridáme za ostatné vstupné polia,...
		inputs.appendChild(input);
		// ...spolu s obrázkom, ...
		var image = new Image();
		// ...ktorý pridáme za ostatné obrázky
		images.appendChild(image);
	}
}
// naviažeme obslužnú funkciu, aby sa vykonala po každej zmene hodnoty v poli s požadovaným počtom obrázkov
bindInput(count, onCountInput);
// zavoláme funkciu manuálne, aby sa vygenerovali polia podľa aktuálnej hodnoty
onCountInput.call(count);

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